In the following chapters, I address the three key questions about the development of representations of mental life introduced in the previous chapter: (1) What are the components, or “conceptual units,” that anchor representations of mental life at different points in development? (Chapter III); (2) How are these conceptual units organized in relation to each other, and how does this organization change over development? (Chapter IV); and (3) How do people of different ages deploy their conceptual representations of mental life to reason about specific entities in the world? (Chapter V).

The organization of Chapters IV-VI is somewhat unconventional. Rather than introducing a new study in each chapter, I analyze data from all four studies in Chapter III, and then return to re-analyze these same datasets in Chapter IV, and again in Chapter V; in other words, instead of proceeding study by study (including multiple analyses for each study), I proceed analysis by analysis, drawing on the full set of studies for each analysis. My goal in presenting these results in this unusual manner is to paint a holistic picture of developmental change in each of these distinct aspects of conceptual representation, without requiring the reader to look back and forth between chapters to make comparisons across parallel analyses (or switch back and forth between different complex analyses within a single chapter).

With this roadmap in mind, in the current chapter I describe the methods for all of the studies included in this dissertation (“Methods”). This chapter is intended to give the reader a general sense of the studies included in this dissertation and to provide the reader with an easily accessible resource for finding details about any particular study as it becomes relevant in Chapters III-VI.

General approach

In this dissertation, I examine conceptual representations of mental life by documenting participants’ mental capacity attributions to a wide variety of familiar entities that might be perceived to vary in their mental lives, including humans, non-human animals, technologies, and inert objects. These studies were designed to capture participants’ beliefs about the co-occurrence of a diverse range of mental capacities: When a participant indicates that some entity has one capacity (e.g., for pain, or happiness, or memory), what other capacities do they tend to attribute to that entity? The goal of these studies was to facilitate participants’ engagement with deep questions about the nature of mental life—in particular, the similarities, differences, and relationships among different mental capacities—through simple questions grounded in concrete, real-world examples.

My general approach was inspired by Gray et al.‘s (2007) landmark study on what they called “the dimensions of mind perception.” In this study, and in much of their subsequent work on mind perception among adults, each participant answered questions about many pairs of target characters (e.g., a robot vs. a fetus, a baby vs. an adult woman, an adult man vs. a chimpanzee, a dog vs. God), while focusing on a single mental capacity (e.g., joy). In other work on adults’ understanding of the mind, participants have compared the mental capacities of different classes of target characters to humans as a point of reference (e.g., animals vs. humans, robots vs. humans, supernatural beings vs. humans; Haslam et al., 2008).

In the current studies, I took a slightly different approach. Instead of asking participants to compare the relative mental capacities of many different characters or classes of characters, I asked participants to assess a wide variety of mental capacities for just one or two target characters (e.g., assessing a robot on many different sensory, perceptual, emotional, cognitive, and social abilities). As I have argued elsewhere (Weisman et al., 2017), asking each participant instead to assess many mental capacities for just one or two target characters confers the major advantage of focusing participants’ attention on the similarities, differences, and relationships among a wide range of mental capacities (rather than on the similarities, differences, and relationships among various target characters). Moreover, because this approach centers on asking participants straightforward questions in relatively simple language (e.g., “Can a robot feel happy?”, “Can a beetle remember things?”), it opens up the possibility of using the same experimental method to study conceptual representations across a wide age range—the primary goal of this dissertation.

This dissertation features two variants of this general approach, i.e., two different strategies for eliciting conceptual representations of mental life through mental capacity attributions: (1) asking participants to assess the mental capacities of a select number of “edge cases” in social reasoning; and (2) asking participants to assess the mental capacities of a diverse range of target characters.

Both strategies depend on making sense of variability across participants to explore the three aspects of conceptual representation that are the focus of the current research:

  1. Tracking the covariance of mental capacity attributions (Chapter III) provides a way of identifying “conceptual units.” For example, if participants who endorse Capacity X also tend to endorse Capacity Y, this provides some evidence that Capacity X and Capacity Y might be associated with the same conceptual unit.
  2. Tracking asymmetries in mental capacity attributions (Chapter IV) provides a way of assessing the hierarchical organization of these units. For example, if many participants endorse capacities associated with Conceptual Unit A without endorsing capacities associated with Conceptual Unit B, but very few participants endorse capacities do the reverse (endorsing capcaities associated with Conceptual Unit B but not Conceptual Unit A), this provides some evidence that Conceptual Unit A might be considered more basic or fundamental than Conceptual Unit B, or a necessary prerequiste for Conceptual Unit B.
  3. Tracking which mental capacities are attributed to which beings in the world (Chapter V) provides a way of observing the application or deployment of these conceptual representations in reasoning about specific entities in the real world. For example, if participants who assess the mental capacities of Characters 1, 2, and 3 share one general pattern of mental capacity attributions, and participants who assess the mental capacities of Characters 4, 5, and 6 share another pattern, this provides some evidence that conceptual representations of mental life might play a role in structuring representations of (and interactions with) different classes of beings in the world.

Each of these three lines of analysis requires variability across participants in which capacities (or which suites of capacities) they do or do not endorse, to what degree. (For more details on my operationalization of these aspects of conceptual representation, see Chapters IV-VI.)

In the “edge case” variant of this experimental approach (employed in Studies 1a-1c, Study 2, and Study 4), this variability was introduced by asking participants to reason about entities that might be considered borderline cases in social reasoning: beetles and robots. This approach hinges on the fact that, at least at this point in history, the “mental lives” of beetles and robots are unknown to most ordinary people, ambiguous even during direct observation of these entities, and generally considered “up for debate,” such that individual people are likely to differ in their sense of what capacities and experiences these entities might have. Thus, in the “edge case” variant of the experimental approach, the variability required for the analyses of conceptual structure outlined in the previous paragraph emerged from a combination of (a) individual differences in participants’ opinions or beliefs about a given target character and (b) differences between the two target characters themselves. Because beetles are animals and robots are artifacts, this particular pair also provides insight into the role of biological life in attributions of mental life—an issue of particular interest from a developmental perspective, given the long history of work on the development of the animate-inanimate distinction and its relation to folk psychology (XX CITE Gelman & Opfer, R. Gelman & Spelke, others?).

In the “diverse characters” variant of this approach (employed in Study 1d and Study 3), a wider range of target characters were included in the design of the study, including humans (e.g., adults, children), non-human animals (e.g., mammals, birds, insects), technologies (e.g., robots, computers), and inert objects (e.g., toys, tools). In these studies, different subsets of participants were asked to reason about beings with dramatically different mental capacity profiles. Thus, in the “diverse characters” variant of the experimental approach, the required variability emerged primarily from differences among the wide variety of target characters (and, to a lesser degree, individual differences in participants’ opinions or beliefs about a given target character). The inclusion of many diverse target characters offers a somewhat more representative picture of the wide variety of cases in which people might reason about mental life in the real world.

Interestingly, these two strategies for eliciting variability mental capacity attributions have turned out to yield very similar pictures of conceptual representations of mental life, both among adults and among children; I return to this point in the General Discussion. [XX CHECK THAT THIS IS TRUE].

In the following sections I include specifics about the experimental design, participants, materials, and procedure for each of these studies.

Common methods

In all of the studies included in this dissertation, each participant was asked to assess 1-2 target characters (e.g., a beetle, a robot, a goat, etc.) on a wide range of sensory, perceptual, emotional, social, cognitive, and other mental capacities, ranging in number from 18-40 across studies and presented in either a random or a pseudo-random (counterbalanced) order. Participants were presented with a vivid, full-color photograph of their assigned target in a naturalistic context (e.g., a beetle on a leaf; a robot in an office; a goat in a grassy field), which they had access to throughout the study. On each trial, participants were asked to assess whether the target entity was capable of a particular mental capacity.

Below I present details about the particular target characters and mental capacities included in each study, as well as the materials and physical setup.

Study 1: An adult endpoint

Note: The full deatiled methods for Study 1 have been published in XX CITE Weisman et al. (2017). For the sake of comparison with Studies 2-4, I provide an abridged version here.

Study 1 was designed to investigate conceptual respresentations of mental life among US adults; as such, it provides an adult “endpoint” for the developmental processes under exploration in Studies 2-4.

Adults participated online via Amazon Mechanical Turk (MTurk). Participants were shown a vivid, full-color image and a label for their assigned target character(s) (e.g., “a robot”; “a beetle”), and were asked to rate the character(s) on 40 different mental capacities, presented in a random order. For each mental capacity, the participant was required to answer the question, “On a scale of 0 (Not at all capable) to 6 (Highly capable), how capable is a [target] of [capacity]?” Participants responded using a 7-point Likert-type scale.

The list of 40 mental capacities employed in these studies was generated from an a priori conceptual analysis of possibile ontological categories of mental life (e.g., affective experiences, perceptual abilities, physiological sensations), with the constraint that each category should include at least five items of varying valence, complexity, and phrasing; see Table 2.1.

The set of target characters employed in these studies is presented in Figure 2.1.

Studies 1a-1c employed the “edge case” strategy for eliciting mental capacity attributions, which involved asking participants to assess the mental capacities of beetles and robots. In Studies 1a and 1b, participants (Study 1a: n=405 US adults; Study 1b: n=406 US adults) were randomly assigned to assess one of these two target characters on all 40 mental capaciaties. In Study 1c, n=400 US adults were asked to assess both target characters, presented side-by-side with left-right order determined randomly, on all 40 mental capaciaties.

Study 1d employed the “diverse characters” strategy for eliciting mental capacity attributions, which in this case involved asking participants to assess the mental capacities of 21 target characters, spanning a wide range of potential mental capacity profiles. The list of characters again included a beetle and a robot (as in Studies 1a-1c), as well as a stapler, a car, a computer, a microbe, a fish, a blue jay, a frog, a mouse, a goat, a dog, a bear, a dolphin, an elephant, a chimpanzee, a fetus, a person in a persistent vegetative state, an infant, a child, and an adult. In Study 1d, n=431 US adults were randomly assigned to assess one of these 21 target characters on all 40 mental capacities.

Figure 2.1: Target characters used in Studies 1a-1d, presented with the verbal label used to describe each character. Human characters are presented in the first row, non-human mammals in the second row, non-mammal animals in the third row, and inert objects in the fourth row. Studies 1a-1c employed the edge case variant of the general approach, in which participants assessed the mental capacities of beetles and robots; these characters are indicated with a black border. Study 1d employed the diverse characters variant of the general approach, in which participants assessed the wide variety of target characters presented here. Note that the picture used to illustrate the robot character varied between Studies 1a-1c vs. Study 1d.

Figure 2.1: Target characters used in Studies 1a-1d, presented with the verbal label used to describe each character. Human characters are presented in the first row, non-human mammals in the second row, non-mammal animals in the third row, and inert objects in the fourth row. Studies 1a-1c employed the “edge case” variant of the general approach, in which participants assessed the mental capacities of beetles and robots; these characters are indicated with a black border. Study 1d employed the “diverse characters” variant of the general approach, in which participants assessed the wide variety of target characters presented here. Note that the picture used to illustrate the robot character varied between Studies 1a-1c vs. Study 1d.

Data processing

All analyses were conducted on raw data, in which participants’ responses were recorded as integers between 0-6. All participants were required to answer all trials, and response times were not recorded, so there were trials with missing data.

Table 2.1: Mental capacity items used in Studies 1-4. Capacities are grouped according to the a priori categories that guided the initial exploration of representations of mental life in Study 1 (as published in Weisman et al., 2017). In Studies 2-4, each item was associated with a preset definition (leftmost column). For items marked with an asterisk, this definition was provided to all participants; otherwise, it was provided to children (but not adults) only if they indicated that they did not understand the question. For a subset of participants in Study 3, two additional questions were asked at the very end of the study (listed under 'Additional questions (Study 3).' Study 4 included four additional items that did not align with items used in Studies 1-3 (listed under 'New items (Study 4)').
Study 1 Study 2 Study 3 Study 4 Definition (Studies 2-3) Definition (Study 4)
Affective experiences (per Weisman et al., 2017)
feeling happy feel happy feel happy feel happy like when you're feeling good like when you feel good
feeling depressed feel sad feel sad get sad like when you're feeling unhappy like when you feel unhappy
experiencing fear feel scared feel scared get scared like when you're feeling afraid like when you feel afraid
getting angry get angry get angry - like when you're feeling mad -
feeling calm feel calm - - like when you're feeling relaxed -
experiencing joy feel joy - - like when you're feeling really, really, really happy -
Perceptual abilities (per Weisman et al., 2017)
detecting sounds hear sounds - hear like when you hear a noise like when you hear sounds and noises
seeing things see things - see like when you see something like when you see all the things that are around you
sensing temperatures sense temperatures sense temperatures - like when you feel warm or cold -
detecting odors smell things smell things smell things like when you can smell something like when you can tell if something smells sweet, or rotten
perceiving depth sense whether something is close by or far away sense whether something is close by or far away - like when you can tell how far away something is -
Physiological sensations (per Weisman et al., 2017)
getting hungry get hungry get hungry feel hungry like when you feel like you need to eat something like when you feel like you need to eat something
feeling tired feel tired feel tired feel tired like when you feel like you need to go to sleep like when you feel sleepy
experiencing pain feel pain feel pain - like when something hurts -
feeling nauseated feel sick* feel sick* feel sick like when you feel like you might throw up* like when you feel like you might throw up
feeling safe feel safe - - like when you know that you're okay and you're not in danger -
Cognitive abilities (per Weisman et al., 2017)
doing computations do math - - like when you add or subtract numbers -
having thoughts have thoughts - think like when you're thinking about something like when you have a thought or an idea about something
reasoning about things figure out how to do things figure out how to do things figure things out like when you're trying to figure something out like when you solve a puzzle or learn something new
remembering things remember things remember things remember things like when you remember something that happened before like when you remember something that happened yesterday
holding beliefs have beliefs* - - like when you think something is true* -
Agentic capacities (per Weisman et al., 2017)
having free will decide what to do - - like when you choose to do something or not to do it -
making choices make choices make choices - like when you choose between different things -
exercising self-restraint have self-control* - - like when you stop yourself from doing something you shouldn't do* -
having intentions make plans - - like when you are planning to do something -
working toward a goal have goals* - - like when you're working hard to do something or make something happen* -
Social abilities (per Weisman et al., 2017)
feeling love feel love feel love love someone like when you really like somebody and care about them a lot like when you really like somebody and care about them a lot
recognizing someone recognize somebody else - - like when you know who somebody is -
communicating with others communicate with somebody else - - like when you tell somebody something -
experiencing guilt feel guilty feel guilty feel sorry like when you feel bad because you did something mean like when you feel bad because you hurt somebody else
feeling disrespected get hurt feelings get hurt feelings - like when you feel bad because somebody insulted you or said something mean about you -
understanding how others are feeling understand how somebody else is feeling - - like when you can tell whether somebody is happy or sad -
feeling embarrassed feel embarrassed feel embarrassed - like when you feel embarrassed about something that happened to you -
Other/miscellaneous (per Weisman et al., 2017)
being conscious be aware of things be aware of things - like when you're conscious and you know what's going on -
being self-aware be aware of itself - - like when you are thinking about yourself -
experiencing pleasure feel pleasure* - - like when something feels really good* -
having desires have desires* - - like when you really want something* -
telling right from wrong know what's nice and what's mean - - like when you know what would be nice to do and what would be mean to do -
having a personality have a personality* - - like when someone is shy and somebody else is silly* -
experiencing pride feel proud feel proud - like when you feel really good about something you did -
Additional questions (Study 3)
- - [is] made out of metal - like it has metal inside of it -
- - be turned on and off - like you can do something to turn it on and then turn it off -
New items (Study 4)
- - - get thirsty - like when you feel like you need to drink something
- - - hate someone - like when you really don't like somebody
- - - get lonely - like when you feel sad because you miss somebody
- - - know stuff - like when you know a fact or know how to do something

Study 2: Conceptual change between middle childhood (7-9y) and adulthood

The goal of Study 2 was to develop an experimental paradigm similar to that employed in Study 1 that could be used to explore the development of conceptual representations of mental life among children, and to conduct an initial exploration of these conceptual representations in middle childhood. Study 2 employed the “edge case” strategy used in Studies 1a-1c, with participants asked to reason about the mental lives of either a beetle or a robot.

Pilot testing suggested that children as young as 7 years of age found the paradigm easy and enjoyable, and work on the development of lay biology and psychology has suggested that these concepts may continue to develop well into middle childhood (e.g., XX CITE Carey, 1985; Hatano & Inagaki, 1997; Piaget, 1929; cf. Gelman & Opfer, 2002). Thus, I targeted 7- to 9-year-old children for the first child sample. I also recruited a group of adults to validate this child- friendly paradigm, i.e., to evaluate whether it replicated the results of Study 1 (XX CITE Weisman et al., 2017).

Recall that, in Study 1, adult participants evaluated target characters on 40 mental capacities using a seven-point Likert-type scale. Pilot testing suggested two necessary modifications for children: rewording some of the mental capacity items, and using a simpler response scale featuring only three (rather than seven) response options: no, kinda, or yes. This truncated scale allowed children to move fast enough through the study to answer all 40 mental capacity questions—a the top priority in the design of these studies (as discussed in the opening section of this chapter).

Participants

In total, 400 people participated in this study.

Adults (n=200) participated via MTurk in July 2016. Adult participants had gained approval for at least 95% of their previous work on MTurk; had MTurk accounts based in the US; and indicated that they were at least 18 years old. Adults were paid $0.30 for approximately 2-3 minutes of their time (median duration: 2.48 min).

According to self report, the adult sample ranged in age from 18-65 years (median: 31y) and was roughly split between women (47%) and men (52%; 1% of participants identified as some other gender or opted not to disclose). Adults predominantly identified as White (81%; 8% identified as more than one race/ethnicity, and \(\leq\) 4% as any other race/ethnicity). The vast majority of adults reported English being their only native language (91%; an additional 7% indicated that English was one of multiple native languages for them.)

Children (n=200) participated at one of several San Francisco Bay Area museums or at their younger sibling’s preschool between July-December 2016. The study took most children under 10 minutes to complete (median duration: 5.18 min). An additional 12 children participated but were excluded for being outside the target age range (n=7), being of unknown age (n=4), or being shown a target character other than a beetle or a robot (n=1). Children received a small thank-you gift (e.g., a sticker) for their participation.

Children ranged in age from 7.01-9.99 years (median: 8.31y). According to parental report, the child sample included slightly more girls (56%) than boys (42%; 2% of children’s gender was non-binary or unknown). Parents predominantly identified their children as White (32%), multiracial (12%), East Asian (12%), or South Asian (10%; \(\leq\) 8% of children were identified as any other race/ethnicity, and 22% of children’s race/ethnicity was unknown). Roughly half of parents (46%) reported that their child was bilingual (though, anecdotally, parents’ interpretations of “bilingual” ranged from taking classes at school to speaking a langauge at home).

Materials and procedure

Study 2 employed the “edge case” variant of the general approach: Participants were randomly assigned to assess the mental capacities of either a beetle (n=98 adults, n=104 children) or a robot (n=102 adults, n=96 children). The images used to depict these target characters are presented in Figure 2.2.

Figure 2.2: Target characters used in Studies 2-3, presented with the verbal label used to describe each character. Animal characters are presented in the first row, and inert objects in the second row. Studies 2 and 4 employed the edge case variant of the general approach, in which participants assessed the mental capacities of beetles and robots; these characters are indicated with a black border. Study 2 employed the diverse characters variant of the general approach, in which participants assessed the wider range of target characters presented here.

Figure 2.2: Target characters used in Studies 2-3, presented with the verbal label used to describe each character. Animal characters are presented in the first row, and inert objects in the second row. Studies 2 and 4 employed the “edge case” variant of the general approach, in which participants assessed the mental capacities of beetles and robots; these characters are indicated with a black border. Study 2 employed the “diverse characters” variant of the general approach, in which participants assessed the wider range of target characters presented here.

Instructions to participants focused on the idea that the research team wanted to know what participants thought “[beetles/robots] can do and can not do.” Participants rated the target character on 40 mental capacities, presented in a random order for each participant. On each trial, participants responded no, kinda, or yes to the question “Do you think a [beetle/robot] can…?” The three response options were visible throughout the experiment.

The 40 mental capacities were designed to be as close as possible to those in Study 1, while being comprehensible to children in early elementary school. As in Study 1, each a priori category included at least five items of varying valence, complexity, and phrasing; see Table 2.1.

Each item was associated with a pre-set definition or explanation, to allow the data collection team to be consistent in our responses to participants (particularly children) if they asked for clarification; see Table 2.1. Children were encouraged at the beginning of the study to ask questions if they did not know what a word meant, in which case they given these definitions; adults were told that they could access these definitions by hovering over the text on the computer screen. Pilot testing suggested that seven items required clarification for most children, so these items were always accompanied by their definitions from the beginning of the trial (for both adults and children), as follows: have a personality, like when someone is shy and somebody else is silly; have beliefs, like when you think something is true; feel pleasure, like when something feels really good; have desires, like when you really want something; have self- control, like when you stop yourself from doing something you shouldn’t do; have goals, like when you’re trying hard to do something or make something happen; and feel sick, like when you feel like you might throw up.

Adults completed the study by clicking through a website at their own pace, with one trial presented on each page and no ability to go backwards. Children completed the study on an experimenter’s laptop computer. The experimenter read the instructions and the first several trials out loud, requesting verbal responses from the child and selected his or her response for her; after several trials, the experimenter gave the child the option to continue independently (reading the questions and selecting their answers themselves) if they desired. Roughly half of participants completed the remainder of the task independently.

Data processing

Trials with response times that were faster than a preset criterion of 250ms (n=3 child trials, n=97 adult trials) were dropped, participants were retained regardless of skipped trials (n=55 child trials, n=1 adult trial). Overall, only 1% of adult trials and 1% of child trials were missing data; in these cases, I imputed missing values using the median by target character, capacity, and age group.

Study 3: Conceptual change over early and middle childhood (4-9y)

Study was designed with two goals in mind.

First, it aimed to extend the findings with 7- to 9-year-old children in Study 2 by expanding the list of the target characters to include not only the two “edge cases” from Study 2 (a beetle and a robot), but a also a wider range of animate beings (a bird, a goat, and an elephant) and inanimate objects (a computer, a teddy bear, and a doll)—i.e., by moving from the “edge case” strategy to the “diverse characters” strategy for eliciting mental capacity attributions.

Second, Study 3 assessed the earlier development of conceptual structure in a group of younger children: 4- to 6-year-old children. The time from 4-6 years has been identified as a period of dramatic development in several relevant domains. As described in Chapter I [XX MAKE SURE THIS IS TRUE], many studies have documented shifts in children’s abilities to take others’ perspectives, represent false beliefs, and integrate representations of intentions and outcomes in evaluating moral responsibility (for reveiws, see XX CITE Flavell, 1999; Wellman, 2015). The preschool years have also been the focus of a rich tradition of work on lay biology and the animate-inanimate distinction extending back nearly a century (e.g., XX CITE Carey, 1985; R. Gelman, Spelke, & Meck, 1983; Medin, Waxman, Woodring, & Washinawatok, 2010; Piaget, 1929; for a review, see S. Gelman & Opfer, 2002). All of these accounts make the case that becoming a sophisticated reasoner—and particularly a sophisticated social reasoner—requires substantial refinement of one’s representations of others’ experiences, beliefs, desires, and needs. Might these refinements include changes to the structure of children’s concepts of mental life?

Participants

A total of 365 people participated in this study, including a group of adults, a group of “older” children (7-9y), and a group of “younger” children (4-6y).

Adults (n=116) participated via MTurk in September 2018. Adult participants had gained approval for at least 95% of their previous work on MTurk; had MTurk accounts based in the US; and indicated that they were at least 18 years old. Adults were paid $0.45 for approximately 2-4 minutes of their time (median duration: 3.02 min). An additional 22 adults participated but were excluded for failing to respond sensibly to an open-ended question about what they had been asked to do in the study (e.g., copying and pasting text from the question, writing “good study,” or describing a different study, e.g., “I wrote an essay about nature”; n=11) or for failing to pass one or more attention checks (e.g., “Please select no”; n=11). According to self report, the final adult sample ranged in age from 20-69 years (median: 38y) and included slightly more men (53%) than women (47%). Adults predominantly identified as White (84%; 2% identified as more than one race/ethnicity, and \(\leq\) 4% as any other race/ethnicity).

Two groups of children were recruited for this study: “older” children (7-9y) and “younger” children (4-6y). The planned sample size was 120 per age group, but the research team also retained a handful of extra participants who completed the study on the final day of data collection for each group.

The group that I refer to as “older children” (n=125) ranged in age from 7.08-9.98 years (median: 8.56y), and participated at one of several San Francisco Bay Area museums or at their younger sibling’s preschool between July-December 2016. The study took most older children under 4 minutes to complete (median duration: 2.70 min). According to parental report, the sample of older children included slightly more boys (54%) than girls (45%); 1% of children’s gender was non-binary or unknown). Parents predominantly identified their children as White (30%), South Asian (14%), multiracial (11%), or East Asian (10%); \(\leq\) 7% of children were identified as any other race/ethnicity, and 22% of children’s parents declined to provide information on their race/ethnicity).

“Younger children” (n=124) ranged in age from 4.00-6.98 years (median: 5.03y), and participated either at a university-affiliated preschool or at a Bay Area museum between January-June 2017. The study took most younger children under 6 minutes to complete (median duration: 3.58 min). According to parental report and school records, the sample of younger children included roughly the same number of girls (48%) and boys (52%). Children were predominantly identified as multiracial (46%) or White (28%; \(\leq\) 6% of children were identified as any other race/ethnicity, and 5% of children’s parents declined to provide information on their race/ethnicity).

An additional 7 children participated but were excluded for being outside the target age ranges. At museums (but not at the preschool), children received a small thank-you gift (e.g., a sticker) for their participation.

Materials and procedure

Pilot testing suggested that working with younger children would require making a briefer experimental paradigm with fewer than the 40 questions included in Study 2; limiting the list to 20 questions seemed to allow children as young as 4 years of age to complete the study easily and without getting bored or frustrated, while still including enough items to facilitate the exploratory “dimensionality reduction” approach to uncovering conceptual structure.

Study 3 employed the “edge case” variant of the general approach. Participants were assigned to evaluate one of the following target characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer (n per characater: 6-18 adults, 10-17 older children, and 12-16 younger children; see Table 2.2 for exact counts). The images used to depict these target characters are presented in Figure 2.2.

Table 2.2: Sample sizes by target character and age group for Study 2.
character adults older children (7-9y) younger children (4-6y)
elephant 15 17 14
goat 18 14 14
mouse 9 15 15
bird 14 15 12
beetle 11 17 14
robot 18 14 12
computer 10 11 14
teddy bear 6 10 16
doll 15 12 13
TOTAL N 116 125 124

Participants were assigned to target characters randomly, with two exceptions: (1) The doll and teddy bear conditions were run last for older children (but included in the initial randomization scheme for adults and younger children); and (2) Toward the end of data collection with children, children were assigned to conditions that had the fewest participants. (This was not possible with adults, which is why the number of adults per condition was more variable than the number of children per condition.) As in Study 1, a vivid, high-resolution photo of the target character in a naturalistic context was visible for the duration of the study.

Instructions and procedure were identical to Study 2, with two exceptions: (1) Participants rated the target character on 20 (rather than 40) mental capacities; and (2) For younger children, the experimenter read all questions out loud and children responded verbally.

The 20 mental capacities were a subset of the 40 items used in Study 2, chosen to cover a similar range of capacities as included in Studies 1-2 (see Table 2.1). These items were also selected to include some of the strongest-loading items for each of the factors uncovered among adults in Study 2 (see Chapter III for further discussion). As in Study 2, each mental capacity was associated with a short, preset definition. With the exception of the item feel sick, which was always presented along with its definition (like when you feel like you might throw up) for both adults and children, these definitions were only given to children if they indicated that they did not know what a word meant; both older and younger children were encouraged at the beginning of the study to ask questions if they did not know what a word meant. In Study 3 adult particpiants did not have access to these definitions.

After completing the 20 questions about mental capacities, a subset of participants also answered two additional questions: “Is a [target] made out of metal?” and “Can a [target] be turned on and off?” These questions were always asked last, were not intended to be included in any of the primary analyses, and will not be analyzed here. [XX COULD INCLUDE IN SOME APPENDIX?]

Data processing

As in Study 2, I planned to drop trials with response times that were faster than a preset criterion of 250ms, but there were none among children, and I failed to record response times among adults. As in Study 2, participants were retained regardless of skipped trials. Overall, none of adults or older children’s trials, and only 1.22% of younger children’s trials (n=30) were missing data.

Study 4: A focus on early childhood (4-5y)

The primary goal of Study 4 was to provide a conceptual replication and extension of Study 3, with a special focus on the youngest children included in the previous studies (4-year-old children). In light of concerns about vocabulary, attention, and use of the response scale among preschool-age children in Study 3, I designed an even more child-friendly version specifically tailored to appropriate for young preschoolers, by streamlining the experimental protocol, providing more scaffolding for the response scale, and including only vocabulary items that were pre-tested to be familiar to young preschool children.

To extend the results of Study 3, and for the sake of completeness of the comparison between children in early chidlhood, middle childhood, and adulthood, in Study 4 I returned to the “edge case” strategy for eliciting mental capacity attributions, limiting the target characters to a beetle and a robot (as in Studies 1a-1c and Study 2).

Participants

148 people participated in this study, including a group of adults and a group of 4- to 5-year-old children.

Adults (n=104) participated via MTurk in September 2018. Adult participants had gained approval for at least 95% of their previous work on MTurk; had MTurk accounts based in the US; and indicated that they were at least 18 years old. Adults were paid $0.45 for approximately 2-4 minutes of their time (median duration: 3.76 min). An additional 21 adults participated but were excluded for failing to respond sensibly to an open-ended question about what they had been asked to do in the study (see Study 3 for examples; n=16) or for failing to pass one or more attention checks (e.g., “Please select no”; n=5). According to self report, the final adult sample ranged in age from 23-71 years (median: 35y) and included slightly more men (56%) than women (43%). Adults predominantly identified as White (71%; 12% identified as Black; 7% identified as more than one race/ethnicity, and \(\leq\) 12% as any other race/ethnicity).

XX CHECK WHEN SAMPLE IS COMPLETE: The planned sample size was 100 4- to 5-year-old children. Our final sample of children (n=44) ranged in age from 4.02-5.59 years (median: 4.73y), and participated at a university-affiliated preschool in the Bay Area between January-XX 2018. The research team did not record study duration. According to school records, the sample of younger children included slightly more girls (34%) than boys (23%). Children were predominantly identified as White (32%) or multiracial (16%; \(\leq\) 5% of children were identified as any other race/ethnicity, and 43% of children’s parents declined to provide information on their race/ethnicity).

An additional XX children participated but were excluded for being outside the target age ranges.

Materials and procedure

Materials and procedure were adapted to be more appropriate for young preschoolers, with two primary goals in mind: Streamlining the experimental protocol to improve children’s comprehension and attention to the task, and limiting mental capacities to words that are highly familiar to young preschool children.

In order to streamline the experimental protocol, the task was moved off of the computer (for children but not adults); the experimenter instead used printed photographs to illustrate the target characters (measuring approximately 5 x 8 inches, printed in color and laminated) and recorded children’s responses by hand. At the time of testing, the experimenter and child sat side by side at a table, with the photograph placed on the table directly in front of the child for the duration of the task.

The introduction to the task was also streamlined. The experimenter began by placing the photograph of the first target character in front of the child and asking, “Can you tell me what this is?” If a child provided an answer other than “beetle” or “robot,” the experimenter said something to the effect of, “I’m going to call it a [beetle/robot]”; otherwise, the experimenter affirmed the child’s correct response. The experimenter then said, “We’re going to play a game about [beetles/robots]”; reminded children, “If you ever want to stop playing, you can just let me know and we’ll go back to the classroom” (per this university preschool’s protocol); and then launched directly into the first question (e.g., “Can beetles get sad?”).

To scaffold children’s use of the three-point response scale, the experimenter provided the child with a physical representation of the scale consisting of three large boxes, separated by blank space, containing the words “NO,” “KINDA,” and “YES” written in large font with all capital letters (to aid children with at least some reading skills in recognizing these words); color-coded according to the intensity of response (NO = very light blue, KINDA = medium blue, YES = dark blue); and ordered from left (NO) to right (YES). Each box measured approximately 2 x 4 inches; the boxes were laminated with slightly less than 1 inch of empty space between them (through which the table was visible). In addition to providing these visual and spatial cues to the fact that there were three response options—no, yes, and something conceptually and literally “in between” these extremes—the experimenter described (and then reiterated) these response options on the first three trials (“You can say no [pointing to NO], kinda [pointing to KINDA], or yes [pointing to YES]”). The experimenter repeated these options on the first three trials for all children, and on any other trials where a child took more than a few seconds to answer or provided a response other than saying “yes,” “kinda” or “sorta,” “no,” or clearly pointing to one of the three options on the response scale.

For each of the two target characters (beetle, robot; see Figure 2.2), children answered 18 questions about its mental capacities; see Table 2.1. These items were chosen to be as short as possible and to be highly familiar to young preschool children. They were selected from a larger pilot study in which 3- to 5-year-old children were asked to complete stories that began with each of these mental capacities as a premise (e.g., “Let’s imagine a person who loves someone. What happens next?”; “Now let’s pretend that someone remembers something. What happens next?”) and were judged on the appropriateness of their story completion. Items were also selected to provide a conservative test of developmental differences between younger and older children in the “conceptual units” observed in Study 2; see Chapter III for discussion. As in Studies 2-3, each mental capacity was associated with a short, preset definition (see Table 2.1). Unlike Studies 2-3, none of these definitions were considered mandatory; instead, for all 18 items, definitions were provided to children only if they expressed uncertainty about what a word meant or did not respond after prompting use of the response scale. As in Study 3, in Study 4 adult particpiants did not have access to these definitions.

Children first assessed all 18 mental capacities for one of the two target characters (e.g., the beetle), then completed an easy jigsaw puzzle featuring clothing and accessories appropriate for a rainy day (which took about 30-60 s to complete), and finally assessed all 18 mental capacities for the other target character (e.g., the robot).

This modified procedure—particularly moving the experiment off of the computer for children—required several changes to the experimental design. Rather than randomly assigning children to assess the beetle first or the robot first, the order of target characters was counterbalanced in advance. Likewise, rather than asking about the 18 mental capacities in a random order, questions about the first target character were asked in one of 8 pre-made random orders, and questions about the second target character were asked in the reverse order. The order of the target characters (beetle-robot or robot-beetle) and the order of the mental capacity questions (sequences 1-8) were fully crossed across participants.

Adults participated in an online version of this same task, without a break between target characters. As in Studies 1-2, adults clicked through a website at their own pace, with one trial presented on each page and no ability to go backwards.

Data processing

The research team did not record response times or use this as a criterion for inclusion. As in Studies 1-3, participants were retained regardless of skipped trials (n=XX trials among children; XX% of all trials).

Example data

XXXXXXX

LS0tCnRpdGxlOiAiQ2hhcHRlciBJSTogT3ZlcnZpZXcgb2Ygc3R1ZHkgbWV0aG9kcyBhbmQgYW5hbHlzZXMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKYWx3YXlzX2FsbG93X2h0bWw6IHllcwotLS0KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQojICMgZm9yIGtuaXR0aW5nIHRvIC5kb2N4CiMgb3V0cHV0OgojICAgd29yZF9kb2N1bWVudDoKIyAgICAgcmVmZXJlbmNlX2RvY3g6ICIuL3dvcmQtc3R5bGVzLXJlZmVyZW5jZS5kb2N4IgojIGFsd2F5c19hbGxvd19odG1sOiB5ZXMKICAgCiMgIyBmb3Iga25pdHRpbmcgdG8gLm5iLmh0bWwgCiMgb3V0cHV0OgojICAgaHRtbF9ub3RlYm9vazoKIyAgICAgdG9jOiB5ZXMKIyAgICAgdG9jX2RlcHRoOiA0CiMgICAgIHRvY19mbG9hdDogeWVzCmBgYAoKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwc3ljaCkKbGlicmFyeShsYW5nY29nKSAjIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2xhbmdjb2cvbGFuZ2NvZy1wYWNrYWdlCiMgbGlicmFyeShsbWU0KQpsaWJyYXJ5KGJybXMpCmxpYnJhcnkoc3RyaW5naSkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGthYmxlRXh0cmEpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KIyBzdXBwb3J0aW5nIGZ1bmN0aW9ucwpzb3VyY2UoIi4vc2NyaXB0cy9tYXhfZmFjdG9yc19lZmEuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3JldGVuX2Z1bi5SIikKc291cmNlKCIuL3NjcmlwdHMvcGxvdF9mdW4uUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2VmYV9mdW4uUiIpCnNvdXJjZSgiLi9zY3JpcHRzL21zX2Z1bi5SIikKCiMgZGF0YSBzY3JpcHRzCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczFfYWQuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczFfNzkuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczJfYWQuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczJfNzkuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczJfNDYuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczNfYWQuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2RhdGFfczNfNDYuUiIpCmBgYAoKYGBge3J9CiMgd2hhdCBjb3JyZWxhdGlvbiB0byB1c2UKY2hvc2VuX2NvciA8LSAiY29yIiAjIHJlcG9ydGVkCiMgY2hvc2VuX2NvciA8LSAicG9seSIgIyBhbHRlcm5hdGl2ZSBvcHRpb24KCiMgd2hhdCByb3RhdGlvbiB0byB1c2UKY2hvc2VuX3JvdCA8LSAidmFyaW1heCIgIyByZXBvcnRlZAojIGNob3Nlbl9yb3QgPC0gIm9ibGltaW4iICMgYWx0ZXJuYXRpdmUgb3B0aW9uCgojIHdoYXQgZmFjdG9yaW5nIG1ldGhvZCB0byB1c2UKY2hvc2VuX2ZtIDwtICJtaW5yZXMiICMgcmVwb3J0ZWQgKHNlZSBhbHRlcm5hdGl2ZSBvcHRpb25zIGluID9mYSkKCiMgd2hhdCBzY29yaW5nIG1ldGhvZCB0byB1c2UKY2hvc2VuX3Njb3JlcyA8LSAidGVuQmVyZ2UiICMgcmVwb3J0ZWQKIyBjaG9zZW5fc2NvcmVzIDwtICJyZWdyZXNzaW9uIiAjIGFsdGVybmF0aXZlIG9wdGlvbgpgYGAKCkluIHRoZSBmb2xsb3dpbmcgY2hhcHRlcnMsIEkgYWRkcmVzcyB0aGUgdGhyZWUga2V5IHF1ZXN0aW9ucyBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGludHJvZHVjZWQgaW4gdGhlIHByZXZpb3VzIGNoYXB0ZXI6ICgxKSBfV2hhdCBhcmUgdGhlIGNvbXBvbmVudHMsIG9yICJjb25jZXB0dWFsIHVuaXRzLCIgdGhhdCBhbmNob3IgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGF0IGRpZmZlcmVudCBwb2ludHMgaW4gZGV2ZWxvcG1lbnQ/XyAoQ2hhcHRlciBJSUkpOyAoMikgX0hvdyBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cyBvcmdhbml6ZWQgaW4gcmVsYXRpb24gdG8gZWFjaCBvdGhlciwgYW5kIGhvdyBkb2VzIHRoaXMgb3JnYW5pemF0aW9uIGNoYW5nZSBvdmVyIGRldmVsb3BtZW50P18gKENoYXB0ZXIgSVYpOyBhbmQgKDMpIF9Ib3fCoGRvIHBlb3BsZSBvZiBkaWZmZXJlbnQgYWdlcyBkZXBsb3kgdGhlaXIgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgdG8gcmVhc29uIGFib3V0IHNwZWNpZmljIGVudGl0aWVzIGluIHRoZSB3b3JsZD9fIChDaGFwdGVyIFYpLiAKClRoZSBvcmdhbml6YXRpb24gb2YgQ2hhcHRlcnMgSVYtVkkgaXMgc29tZXdoYXQgdW5jb252ZW50aW9uYWwuIFJhdGhlciB0aGFuIGludHJvZHVjaW5nIGEgbmV3IHN0dWR5IGluIGVhY2ggY2hhcHRlciwgSSBhbmFseXplIGRhdGEgZnJvbSBhbGwgZm91ciBzdHVkaWVzIGluIENoYXB0ZXIgSUlJLCBhbmQgdGhlbiByZXR1cm4gdG8gcmUtYW5hbHl6ZSB0aGVzZSBzYW1lIGRhdGFzZXRzIGluIENoYXB0ZXIgSVYsIGFuZCBhZ2FpbiBpbiBDaGFwdGVyIFY7IGluIG90aGVyIHdvcmRzLCBpbnN0ZWFkIG9mIHByb2NlZWRpbmcgc3R1ZHkgYnkgc3R1ZHkgKGluY2x1ZGluZyBtdWx0aXBsZSBhbmFseXNlcyBmb3IgZWFjaCBzdHVkeSksIEkgcHJvY2VlZCBhbmFseXNpcyBieSBhbmFseXNpcywgZHJhd2luZyBvbiB0aGUgZnVsbCBzZXQgb2Ygc3R1ZGllcyBmb3IgZWFjaCBhbmFseXNpcy4gTXkgZ29hbCBpbiBwcmVzZW50aW5nIHRoZXNlIHJlc3VsdHMgaW4gdGhpcyB1bnVzdWFsIG1hbm5lciBpcyB0byBwYWludCBhIGhvbGlzdGljIHBpY3R1cmUgb2YgZGV2ZWxvcG1lbnRhbCBjaGFuZ2UgaW4gZWFjaCBvZiB0aGVzZSAgZGlzdGluY3QgYXNwZWN0cyBvZiBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9uLCB3aXRob3V0IHJlcXVpcmluZyB0aGUgcmVhZGVyIHRvIGxvb2sgYmFjayBhbmQgZm9ydGggYmV0d2VlbiBjaGFwdGVycyB0byBtYWtlIGNvbXBhcmlzb25zIGFjcm9zcyBwYXJhbGxlbCBhbmFseXNlcyAob3Igc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gZGlmZmVyZW50IGNvbXBsZXggYW5hbHlzZXMgd2l0aGluIGEgc2luZ2xlIGNoYXB0ZXIpLgoKV2l0aCB0aGlzIHJvYWRtYXAgaW4gbWluZCwgaW4gdGhlIGN1cnJlbnQgY2hhcHRlciBJIGRlc2NyaWJlIHRoZSBtZXRob2RzIGZvciBhbGwgb2YgdGhlIHN0dWRpZXMgaW5jbHVkZWQgaW4gdGhpcyBkaXNzZXJ0YXRpb24gKCJNZXRob2RzIikuIFRoaXMgY2hhcHRlciBpcyBpbnRlbmRlZCB0byBnaXZlIHRoZSByZWFkZXIgYSBnZW5lcmFsIHNlbnNlIG9mIHRoZSBzdHVkaWVzIGluY2x1ZGVkIGluIHRoaXMgZGlzc2VydGF0aW9uIGFuZCB0byBwcm92aWRlIHRoZSByZWFkZXIgd2l0aCBhbiBlYXNpbHkgYWNjZXNzaWJsZSByZXNvdXJjZSBmb3IgZmluZGluZyBkZXRhaWxzIGFib3V0IGFueSBwYXJ0aWN1bGFyIHN0dWR5IGFzIGl0IGJlY29tZXMgcmVsZXZhbnQgaW4gQ2hhcHRlcnMgSUlJLVZJLgoKIyBHZW5lcmFsIGFwcHJvYWNoCgpJbiB0aGlzIGRpc3NlcnRhdGlvbiwgSSBleGFtaW5lIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGJ5IGRvY3VtZW50aW5nIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyB0byBhIHdpZGUgdmFyaWV0eSBvZiBmYW1pbGlhciBlbnRpdGllcyB0aGF0IG1pZ2h0IGJlIHBlcmNlaXZlZCB0byB2YXJ5IGluIHRoZWlyIG1lbnRhbCBsaXZlcywgaW5jbHVkaW5nIGh1bWFucywgbm9uLWh1bWFuIGFuaW1hbHMsIHRlY2hub2xvZ2llcywgYW5kIGluZXJ0IG9iamVjdHMuIFRoZXNlIHN0dWRpZXMgd2VyZSBkZXNpZ25lZCB0byBjYXB0dXJlIHBhcnRpY2lwYW50cycgYmVsaWVmcyBhYm91dCB0aGUgX2NvLW9jY3VycmVuY2VfIG9mIGEgZGl2ZXJzZSByYW5nZSBvZiBtZW50YWwgY2FwYWNpdGllczogV2hlbiBhIHBhcnRpY2lwYW50IGluZGljYXRlcyB0aGF0IHNvbWUgZW50aXR5IGhhcyBvbmUgY2FwYWNpdHkgKGUuZy4sIGZvciBwYWluLCBvciBoYXBwaW5lc3MsIG9yIG1lbW9yeSksIHdoYXQgb3RoZXIgY2FwYWNpdGllcyBkbyB0aGV5IHRlbmQgdG8gYXR0cmlidXRlIHRvIHRoYXQgZW50aXR5PyBUaGUgZ29hbCBvZiB0aGVzZSBzdHVkaWVzIHdhcyB0byBmYWNpbGl0YXRlIHBhcnRpY2lwYW50cycgZW5nYWdlbWVudCB3aXRoIGRlZXAgcXVlc3Rpb25zIGFib3V0IHRoZSBuYXR1cmUgb2YgbWVudGFsIGxpZmXigJRpbiBwYXJ0aWN1bGFyLCB0aGUgc2ltaWxhcml0aWVzLCBkaWZmZXJlbmNlcywgYW5kIHJlbGF0aW9uc2hpcHMgYW1vbmcgZGlmZmVyZW50IG1lbnRhbCBjYXBhY2l0aWVz4oCUdGhyb3VnaCBzaW1wbGUgcXVlc3Rpb25zIGdyb3VuZGVkIGluIGNvbmNyZXRlLCByZWFsLXdvcmxkIGV4YW1wbGVzLiAKCk15IGdlbmVyYWwgYXBwcm9hY2ggd2FzIGluc3BpcmVkIGJ5IEdyYXkgZXQgYWwuJ3MgKDIwMDcpIGxhbmRtYXJrIHN0dWR5IG9uIHdoYXQgdGhleSBjYWxsZWQgInRoZSBkaW1lbnNpb25zIG9mIG1pbmQgcGVyY2VwdGlvbi4iIEluIHRoaXMgc3R1ZHksIGFuZCBpbiBtdWNoIG9mIHRoZWlyIHN1YnNlcXVlbnQgd29yayBvbiBtaW5kIHBlcmNlcHRpb24gYW1vbmcgYWR1bHRzLCBlYWNoIHBhcnRpY2lwYW50IGFuc3dlcmVkIHF1ZXN0aW9ucyBhYm91dCBtYW55IHBhaXJzIG9mIHRhcmdldCBjaGFyYWN0ZXJzIChlLmcuLCBhIHJvYm90IHZzLiBhIGZldHVzLCBhIGJhYnkgdnMuIGFuIGFkdWx0IHdvbWFuLCBhbiBhZHVsdCBtYW4gdnMuIGEgY2hpbXBhbnplZSwgYSBkb2cgdnMuIEdvZCksIHdoaWxlIGZvY3VzaW5nICBvbiBhIHNpbmdsZSBtZW50YWwgY2FwYWNpdHkgKGUuZy4sIGpveSkuIEluIG90aGVyIHdvcmsgb24gYWR1bHRzJyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtaW5kLCBwYXJ0aWNpcGFudHMgaGF2ZSBjb21wYXJlZCB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgZGlmZmVyZW50IGNsYXNzZXMgb2YgdGFyZ2V0IGNoYXJhY3RlcnMgdG8gaHVtYW5zIGFzIGEgcG9pbnQgb2YgcmVmZXJlbmNlIChlLmcuLCBhbmltYWxzIHZzLiBodW1hbnMsIHJvYm90cyB2cy4gaHVtYW5zLCBzdXBlcm5hdHVyYWwgYmVpbmdzIHZzLiBodW1hbnM7IEhhc2xhbSBldCBhbC4sIDIwMDgpLgoKSW4gdGhlIGN1cnJlbnQgc3R1ZGllcywgSSB0b29rIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGFwcHJvYWNoLiBJbnN0ZWFkIG9mIGFza2luZyBwYXJ0aWNpcGFudHMgdG8gY29tcGFyZSB0aGUgcmVsYXRpdmUgbWVudGFsIGNhcGFjaXRpZXMgb2YgbWFueSBkaWZmZXJlbnQgY2hhcmFjdGVycyBvciBjbGFzc2VzIG9mIGNoYXJhY3RlcnMsIEkgYXNrZWQgcGFydGljaXBhbnRzIHRvIGFzc2VzcyBhIHdpZGUgdmFyaWV0eSBvZiBtZW50YWwgY2FwYWNpdGllcyBmb3IganVzdCBvbmUgb3IgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIChlLmcuLCBhc3Nlc3NpbmcgYSByb2JvdCBvbiBtYW55IGRpZmZlcmVudCBzZW5zb3J5LCBwZXJjZXB0dWFsLCBlbW90aW9uYWwsIGNvZ25pdGl2ZSwgYW5kIHNvY2lhbCBhYmlsaXRpZXMpLiBBcyBJIGhhdmUgYXJndWVkIGVsc2V3aGVyZSAoV2Vpc21hbiBldCBhbC4sIDIwMTcpLCBhc2tpbmcgZWFjaCBwYXJ0aWNpcGFudCBpbnN0ZWFkIHRvIGFzc2VzcyBtYW55IG1lbnRhbCBjYXBhY2l0aWVzIGZvciBqdXN0IG9uZSBvciB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgY29uZmVycyB0aGUgbWFqb3IgYWR2YW50YWdlIG9mIGZvY3VzaW5nIHBhcnRpY2lwYW50cycgYXR0ZW50aW9uIG9uIHRoZSBzaW1pbGFyaXRpZXMsIGRpZmZlcmVuY2VzLCBhbmQgcmVsYXRpb25zaGlwcyBhbW9uZyBhIHdpZGUgcmFuZ2Ugb2YgbWVudGFsIGNhcGFjaXRpZXMgKHJhdGhlciB0aGFuIG9uIHRoZSBzaW1pbGFyaXRpZXMsIGRpZmZlcmVuY2VzLCBhbmQgcmVsYXRpb25zaGlwcyBhbW9uZyB2YXJpb3VzIHRhcmdldCBjaGFyYWN0ZXJzKS4gTW9yZW92ZXIsIGJlY2F1c2UgdGhpcyBhcHByb2FjaCBjZW50ZXJzIG9uIGFza2luZyBwYXJ0aWNpcGFudHMgc3RyYWlnaHRmb3J3YXJkIHF1ZXN0aW9ucyBpbiByZWxhdGl2ZWx5IHNpbXBsZSBsYW5ndWFnZSAoZS5nLiwgIkNhbiBhIHJvYm90IGZlZWwgaGFwcHk/IiwgIkNhbiBhIGJlZXRsZSByZW1lbWJlciB0aGluZ3M/IiksIGl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyB0aGUgc2FtZSBleHBlcmltZW50YWwgbWV0aG9kIHRvIHN0dWR5IGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIGFjcm9zcyBhIHdpZGUgYWdlIHJhbmdl4oCUdGhlIHByaW1hcnkgZ29hbCBvZiB0aGlzIGRpc3NlcnRhdGlvbi4gCgpUaGlzIGRpc3NlcnRhdGlvbiBmZWF0dXJlcyB0d28gdmFyaWFudHMgb2YgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLCBpLmUuLCB0d28gZGlmZmVyZW50IHN0cmF0ZWdpZXMgZm9yIGVsaWNpdGluZyBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSB0aHJvdWdoIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnM6ICgxKSBhc2tpbmcgcGFydGljaXBhbnRzIHRvIGFzc2VzcyB0aGUgbWVudGFsIGNhcGFjaXRpZXMgb2YgYSBzZWxlY3QgbnVtYmVyIG9mICJlZGdlIGNhc2VzIiBpbiBzb2NpYWwgcmVhc29uaW5nOyBhbmQgKDIpIGFza2luZyBwYXJ0aWNpcGFudHMgdG8gYXNzZXNzIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiBhIGRpdmVyc2UgcmFuZ2Ugb2YgdGFyZ2V0IGNoYXJhY3RlcnMuIAoKQm90aCBzdHJhdGVnaWVzIGRlcGVuZCBvbiBtYWtpbmcgc2Vuc2Ugb2YgX3ZhcmlhYmlsaXR5IGFjcm9zcyBwYXJ0aWNpcGFudHNfIHRvIGV4cGxvcmUgdGhlIHRocmVlIGFzcGVjdHMgb2YgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbiB0aGF0IGFyZSB0aGUgZm9jdXMgb2YgdGhlIGN1cnJlbnQgcmVzZWFyY2g6CgoxLiBUcmFja2luZyB0aGUgX2NvdmFyaWFuY2VfIG9mIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgKENoYXB0ZXIgSUlJKSBwcm92aWRlcyBhIHdheSBvZiBpZGVudGlmeWluZyAiY29uY2VwdHVhbCB1bml0cy4iIEZvciBleGFtcGxlLCBpZiBwYXJ0aWNpcGFudHMgd2hvIGVuZG9yc2UgQ2FwYWNpdHkgWCBhbHNvIHRlbmQgdG8gZW5kb3JzZSBDYXBhY2l0eSBZLCB0aGlzIHByb3ZpZGVzIHNvbWUgZXZpZGVuY2UgdGhhdCBDYXBhY2l0eSBYIGFuZCBDYXBhY2l0eSBZIG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBjb25jZXB0dWFsIHVuaXQuICAKMi4gVHJhY2tpbmcgX2FzeW1tZXRyaWVzXyBpbiBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIChDaGFwdGVyIElWKSBwcm92aWRlcyBhIHdheSBvZiBhc3Nlc3NpbmcgdGhlIGhpZXJhcmNoaWNhbCBvcmdhbml6YXRpb24gb2YgdGhlc2UgdW5pdHMuIEZvciBleGFtcGxlLCBpZiBtYW55IHBhcnRpY2lwYW50cyBlbmRvcnNlIGNhcGFjaXRpZXMgYXNzb2NpYXRlZCB3aXRoIENvbmNlcHR1YWwgVW5pdCBBIHdpdGhvdXQgZW5kb3JzaW5nIGNhcGFjaXRpZXMgYXNzb2NpYXRlZCB3aXRoIENvbmNlcHR1YWwgVW5pdCBCLCBidXQgdmVyeSBmZXcgcGFydGljaXBhbnRzIGVuZG9yc2UgY2FwYWNpdGllcyBkbyB0aGUgcmV2ZXJzZSAoZW5kb3JzaW5nIGNhcGNhaXRpZXMgYXNzb2NpYXRlZCB3aXRoIENvbmNlcHR1YWwgVW5pdCBCIGJ1dCBub3QgQ29uY2VwdHVhbCBVbml0IEEpLCB0aGlzIHByb3ZpZGVzIHNvbWUgZXZpZGVuY2UgdGhhdCBDb25jZXB0dWFsIFVuaXQgQSBtaWdodCBiZSBjb25zaWRlcmVkIG1vcmUgYmFzaWMgb3IgZnVuZGFtZW50YWwgdGhhbiBDb25jZXB0dWFsIFVuaXQgQiwgb3IgYSBuZWNlc3NhcnkgcHJlcmVxdWlzdGUgZm9yIENvbmNlcHR1YWwgVW5pdCBCLiAKMy4gVHJhY2tpbmcgd2hpY2ggbWVudGFsIGNhcGFjaXRpZXMgYXJlIGF0dHJpYnV0ZWQgdG8gd2hpY2ggYmVpbmdzIGluIHRoZSB3b3JsZCAoQ2hhcHRlciBWKSBwcm92aWRlcyBhIHdheSBvZiBvYnNlcnZpbmcgdGhlIGFwcGxpY2F0aW9uIG9yIGRlcGxveW1lbnQgb2YgdGhlc2UgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgaW4gcmVhc29uaW5nIGFib3V0IHNwZWNpZmljIGVudGl0aWVzIGluIHRoZSByZWFsIHdvcmxkLiBGb3IgZXhhbXBsZSwgaWYgcGFydGljaXBhbnRzIHdobyBhc3Nlc3MgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIG9mIENoYXJhY3RlcnMgMSwgMiwgYW5kIDMgc2hhcmUgb25lIGdlbmVyYWwgcGF0dGVybiBvZiBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLCBhbmQgcGFydGljaXBhbnRzIHdobyBhc3Nlc3MgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIG9mIENoYXJhY3RlcnMgNCwgNSwgYW5kIDYgc2hhcmUgYW5vdGhlciBwYXR0ZXJuLCB0aGlzIHByb3ZpZGVzIHNvbWUgZXZpZGVuY2UgdGhhdCBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBtaWdodCBwbGF5IGEgcm9sZSBpbiBzdHJ1Y3R1cmluZyByZXByZXNlbnRhdGlvbnMgb2YgKGFuZCBpbnRlcmFjdGlvbnMgd2l0aCkgZGlmZmVyZW50IGNsYXNzZXMgb2YgYmVpbmdzIGluIHRoZSB3b3JsZC4gCgpFYWNoIG9mIHRoZXNlIHRocmVlIGxpbmVzIG9mIGFuYWx5c2lzIHJlcXVpcmVzIHZhcmlhYmlsaXR5IGFjcm9zcyBwYXJ0aWNpcGFudHMgaW4gd2hpY2ggY2FwYWNpdGllcyAob3Igd2hpY2ggc3VpdGVzIG9mIGNhcGFjaXRpZXMpIHRoZXkgZG8gb3IgZG8gbm90IGVuZG9yc2UsIHRvIHdoYXQgZGVncmVlLiAoRm9yIG1vcmUgZGV0YWlscyBvbiBteSBvcGVyYXRpb25hbGl6YXRpb24gb2YgdGhlc2UgYXNwZWN0cyBvZiBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9uLCBzZWUgQ2hhcHRlcnMgSVYtVkkuKSAKCkluIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoaXMgZXhwZXJpbWVudGFsIGFwcHJvYWNoIChlbXBsb3llZCBpbiBTdHVkaWVzIDFhLTFjLCBTdHVkeSAyLCBhbmQgU3R1ZHkgNCksIHRoaXMgdmFyaWFiaWxpdHkgd2FzIGludHJvZHVjZWQgYnkgYXNraW5nIHBhcnRpY2lwYW50cyB0byByZWFzb24gYWJvdXQgZW50aXRpZXMgdGhhdCBtaWdodCBiZSBjb25zaWRlcmVkIGJvcmRlcmxpbmUgY2FzZXMgaW4gc29jaWFsIHJlYXNvbmluZzogYmVldGxlcyBhbmQgcm9ib3RzLiBUaGlzIGFwcHJvYWNoIGhpbmdlcyBvbiB0aGUgZmFjdCB0aGF0LCBhdCBsZWFzdCBhdCB0aGlzIHBvaW50IGluIGhpc3RvcnksIHRoZSAibWVudGFsIGxpdmVzIiBvZiBiZWV0bGVzIGFuZCByb2JvdHMgYXJlIHVua25vd24gdG8gbW9zdCBvcmRpbmFyeSBwZW9wbGUsIGFtYmlndW91cyBldmVuIGR1cmluZyBkaXJlY3Qgb2JzZXJ2YXRpb24gb2YgdGhlc2UgZW50aXRpZXMsIGFuZCBnZW5lcmFsbHkgY29uc2lkZXJlZCAidXAgZm9yIGRlYmF0ZSwiIHN1Y2ggdGhhdCBpbmRpdmlkdWFsIHBlb3BsZSBhcmUgbGlrZWx5IHRvIGRpZmZlciBpbiB0aGVpciBzZW5zZSBvZiB3aGF0IGNhcGFjaXRpZXMgYW5kIGV4cGVyaWVuY2VzIHRoZXNlIGVudGl0aWVzIG1pZ2h0IGhhdmUuIFRodXMsIGluIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBleHBlcmltZW50YWwgYXBwcm9hY2gsIHRoZSB2YXJpYWJpbGl0eSByZXF1aXJlZCBmb3IgdGhlIGFuYWx5c2VzIG9mIGNvbmNlcHR1YWwgc3RydWN0dXJlIG91dGxpbmVkIGluIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggZW1lcmdlZCBmcm9tIGEgY29tYmluYXRpb24gb2YgKGEpIGluZGl2aWR1YWwgZGlmZmVyZW5jZXMgaW4gcGFydGljaXBhbnRzJyBvcGluaW9ucyBvciBiZWxpZWZzIGFib3V0IGEgZ2l2ZW4gdGFyZ2V0IGNoYXJhY3RlciBhbmQgKGIpIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3byB0YXJnZXQgY2hhcmFjdGVycyB0aGVtc2VsdmVzLiBCZWNhdXNlIGJlZXRsZXMgYXJlIGFuaW1hbHMgYW5kIHJvYm90cyBhcmUgYXJ0aWZhY3RzLCB0aGlzIHBhcnRpY3VsYXIgcGFpciBhbHNvIHByb3ZpZGVzIGluc2lnaHQgaW50byB0aGUgcm9sZSBvZiBiaW9sb2dpY2FsIGxpZmUgaW4gYXR0cmlidXRpb25zIG9mIG1lbnRhbCBsaWZl4oCUYW4gaXNzdWUgb2YgcGFydGljdWxhciBpbnRlcmVzdCBmcm9tIGEgZGV2ZWxvcG1lbnRhbCBwZXJzcGVjdGl2ZSwgZ2l2ZW4gdGhlIGxvbmcgaGlzdG9yeSBvZiB3b3JrIG9uIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gYW5kIGl0cyByZWxhdGlvbiB0byBmb2xrIHBzeWNob2xvZ3kgKFhYIENJVEUgR2VsbWFuICYgT3BmZXIsIFIuIEdlbG1hbiAmIFNwZWxrZSwgb3RoZXJzPykuIAoKSW4gdGhlICJkaXZlcnNlIGNoYXJhY3RlcnMiIHZhcmlhbnQgb2YgdGhpcyBhcHByb2FjaCAoZW1wbG95ZWQgaW4gU3R1ZHkgMWQgYW5kIFN0dWR5IDMpLCBhIHdpZGVyIHJhbmdlIG9mIHRhcmdldCBjaGFyYWN0ZXJzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRlc2lnbiBvZiB0aGUgc3R1ZHksIGluY2x1ZGluZyBodW1hbnMgKGUuZy4sIGFkdWx0cywgY2hpbGRyZW4pLCBub24taHVtYW4gYW5pbWFscyAoZS5nLiwgbWFtbWFscywgYmlyZHMsIGluc2VjdHMpLCB0ZWNobm9sb2dpZXMgKGUuZy4sIHJvYm90cywgY29tcHV0ZXJzKSwgYW5kIGluZXJ0IG9iamVjdHMgKGUuZy4sIHRveXMsIHRvb2xzKS4gSW4gdGhlc2Ugc3R1ZGllcywgZGlmZmVyZW50IHN1YnNldHMgb2YgcGFydGljaXBhbnRzIHdlcmUgYXNrZWQgdG8gcmVhc29uIGFib3V0IGJlaW5ncyB3aXRoIGRyYW1hdGljYWxseSBkaWZmZXJlbnQgbWVudGFsIGNhcGFjaXR5IHByb2ZpbGVzLiBUaHVzLCBpbiB0aGUgImRpdmVyc2UgY2hhcmFjdGVycyIgdmFyaWFudCBvZiB0aGUgZXhwZXJpbWVudGFsIGFwcHJvYWNoLCB0aGUgcmVxdWlyZWQgdmFyaWFiaWxpdHkgZW1lcmdlZCBwcmltYXJpbHkgZnJvbSBkaWZmZXJlbmNlcyBhbW9uZyB0aGUgd2lkZSB2YXJpZXR5IG9mIHRhcmdldCBjaGFyYWN0ZXJzIChhbmQsIHRvIGEgbGVzc2VyIGRlZ3JlZSwgaW5kaXZpZHVhbCBkaWZmZXJlbmNlcyBpbiBwYXJ0aWNpcGFudHMnIG9waW5pb25zIG9yIGJlbGllZnMgYWJvdXQgYSBnaXZlbiB0YXJnZXQgY2hhcmFjdGVyKS4gVGhlIGluY2x1c2lvbiBvZiBtYW55IGRpdmVyc2UgdGFyZ2V0IGNoYXJhY3RlcnMgb2ZmZXJzIGEgc29tZXdoYXQgbW9yZSByZXByZXNlbnRhdGl2ZSBwaWN0dXJlIG9mIHRoZSB3aWRlIHZhcmlldHkgb2YgY2FzZXMgaW4gd2hpY2ggcGVvcGxlIG1pZ2h0IHJlYXNvbiBhYm91dCBtZW50YWwgbGlmZSBpbiB0aGUgcmVhbCB3b3JsZC4KCkludGVyZXN0aW5nbHksIHRoZXNlIHR3byBzdHJhdGVnaWVzIGZvciBlbGljaXRpbmcgdmFyaWFiaWxpdHkgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBoYXZlIHR1cm5lZCBvdXQgdG8geWllbGQgdmVyeSBzaW1pbGFyIHBpY3R1cmVzIG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlLCBib3RoIGFtb25nIGFkdWx0cyBhbmQgYW1vbmcgY2hpbGRyZW47IEkgcmV0dXJuIHRvIHRoaXMgcG9pbnQgaW4gdGhlIEdlbmVyYWwgRGlzY3Vzc2lvbi4gW1hYIENIRUNLIFRIQVQgVEhJUyBJUyBUUlVFXS4KCkluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgSSBpbmNsdWRlIHNwZWNpZmljcyBhYm91dCB0aGUgZXhwZXJpbWVudGFsIGRlc2lnbiwgcGFydGljaXBhbnRzLCBtYXRlcmlhbHMsIGFuZCBwcm9jZWR1cmUgZm9yIGVhY2ggb2YgdGhlc2Ugc3R1ZGllcy4KCgojIENvbW1vbiBtZXRob2RzCgpJbiBhbGwgb2YgdGhlIHN0dWRpZXMgaW5jbHVkZWQgaW4gdGhpcyBkaXNzZXJ0YXRpb24sIGVhY2ggcGFydGljaXBhbnQgd2FzIGFza2VkIHRvIGFzc2VzcyAxLTIgdGFyZ2V0IGNoYXJhY3RlcnMgKGUuZy4sIGEgYmVldGxlLCBhIHJvYm90LCBhIGdvYXQsIGV0Yy4pIG9uIGEgd2lkZSByYW5nZSBvZiBzZW5zb3J5LCBwZXJjZXB0dWFsLCBlbW90aW9uYWwsIHNvY2lhbCwgY29nbml0aXZlLCBhbmQgb3RoZXIgbWVudGFsIGNhcGFjaXRpZXMsIHJhbmdpbmcgaW4gbnVtYmVyIGZyb20gMTgtNDAgYWNyb3NzIHN0dWRpZXMgYW5kIHByZXNlbnRlZCBpbiBlaXRoZXIgYSByYW5kb20gb3IgYSBwc2V1ZG8tcmFuZG9tIChjb3VudGVyYmFsYW5jZWQpIG9yZGVyLiBQYXJ0aWNpcGFudHMgd2VyZSBwcmVzZW50ZWQgd2l0aCBhIHZpdmlkLCBmdWxsLWNvbG9yIHBob3RvZ3JhcGggb2YgdGhlaXIgYXNzaWduZWQgdGFyZ2V0IGluIGEgbmF0dXJhbGlzdGljIGNvbnRleHQgKGUuZy4sIGEgYmVldGxlIG9uIGEgbGVhZjsgYSByb2JvdCBpbiBhbiBvZmZpY2U7IGEgZ29hdCBpbiBhIGdyYXNzeSBmaWVsZCksIHdoaWNoIHRoZXkgaGFkIGFjY2VzcyB0byB0aHJvdWdob3V0IHRoZSBzdHVkeS4gT24gZWFjaCB0cmlhbCwgcGFydGljaXBhbnRzIHdlcmUgYXNrZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhlIHRhcmdldCBlbnRpdHkgd2FzIGNhcGFibGUgb2YgYSBwYXJ0aWN1bGFyIG1lbnRhbCBjYXBhY2l0eS4gCgpCZWxvdyBJIHByZXNlbnQgZGV0YWlscyBhYm91dCB0aGUgcGFydGljdWxhciB0YXJnZXQgY2hhcmFjdGVycyBhbmQgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQgaW4gZWFjaCBzdHVkeSwgYXMgd2VsbCBhcyB0aGUgbWF0ZXJpYWxzIGFuZCBwaHlzaWNhbCBzZXR1cC4KCiMjIFN0dWR5IDE6IEFuIGFkdWx0IGVuZHBvaW50CgpfTm90ZTogVGhlIGZ1bGwgZGVhdGlsZWQgbWV0aG9kcyBmb3IgU3R1ZHkgMSBoYXZlIGJlZW4gcHVibGlzaGVkIGluIFhYIENJVEUgV2Vpc21hbiBldCBhbC4gKDIwMTcpLiBGb3IgdGhlIHNha2Ugb2YgY29tcGFyaXNvbiB3aXRoIFN0dWRpZXMgMi00LCBJIHByb3ZpZGUgYW4gYWJyaWRnZWQgdmVyc2lvbiBoZXJlLl8KClN0dWR5IDEgd2FzIGRlc2lnbmVkIHRvIGludmVzdGlnYXRlIGNvbmNlcHR1YWwgcmVzcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBhbW9uZyBVUyBhZHVsdHM7IGFzIHN1Y2gsIGl0IHByb3ZpZGVzIGFuIGFkdWx0ICJlbmRwb2ludCIgZm9yIHRoZSBkZXZlbG9wbWVudGFsIHByb2Nlc3NlcyB1bmRlciBleHBsb3JhdGlvbiBpbiBTdHVkaWVzIDItNC4KCkFkdWx0cyBwYXJ0aWNpcGF0ZWQgb25saW5lIHZpYSBBbWF6b24gTWVjaGFuaWNhbCBUdXJrIChNVHVyaykuIFBhcnRpY2lwYW50cyB3ZXJlIHNob3duIGEgdml2aWQsIGZ1bGwtY29sb3IgaW1hZ2UgYW5kIGEgbGFiZWwgZm9yIHRoZWlyIGFzc2lnbmVkIHRhcmdldCBjaGFyYWN0ZXIocykgKGUuZy4sICJhIHJvYm90IjsgImEgYmVldGxlIiksIGFuZCB3ZXJlIGFza2VkIHRvIHJhdGUgdGhlIGNoYXJhY3RlcihzKSBvbiA0MCBkaWZmZXJlbnQgbWVudGFsIGNhcGFjaXRpZXMsIHByZXNlbnRlZCBpbiBhIHJhbmRvbSBvcmRlci4gRm9yIGVhY2ggbWVudGFsIGNhcGFjaXR5LCB0aGUgcGFydGljaXBhbnQgd2FzIHJlcXVpcmVkIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24sICJPbiBhIHNjYWxlIG9mIDAgKE5vdCBhdCBhbGwgY2FwYWJsZSkgdG8gNiAoSGlnaGx5IGNhcGFibGUpLCBob3cgY2FwYWJsZSBpcyBhIFt0YXJnZXRdIG9mIFtjYXBhY2l0eV0/IiBQYXJ0aWNpcGFudHMgcmVzcG9uZGVkIHVzaW5nIGEgNy1wb2ludCBMaWtlcnQtdHlwZSBzY2FsZS4KClRoZSBsaXN0IG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGVtcGxveWVkIGluIHRoZXNlIHN0dWRpZXMgd2FzIGdlbmVyYXRlZCBmcm9tIGFuIGEgcHJpb3JpIGNvbmNlcHR1YWwgYW5hbHlzaXMgb2YgcG9zc2liaWxlIG9udG9sb2dpY2FsIGNhdGVnb3JpZXMgb2YgbWVudGFsIGxpZmUgKGUuZy4sIGFmZmVjdGl2ZSBleHBlcmllbmNlcywgcGVyY2VwdHVhbCBhYmlsaXRpZXMsIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyksIHdpdGggdGhlIGNvbnN0cmFpbnQgdGhhdCBlYWNoIGNhdGVnb3J5IHNob3VsZCBpbmNsdWRlIGF0IGxlYXN0IGZpdmUgaXRlbXMgb2YgdmFyeWluZyB2YWxlbmNlLCBjb21wbGV4aXR5LCBhbmQgcGhyYXNpbmc7IHNlZSBUYWJsZSAyLjEuCgpUaGUgc2V0IG9mIHRhcmdldCBjaGFyYWN0ZXJzIGVtcGxveWVkIGluIHRoZXNlIHN0dWRpZXMgaXMgcHJlc2VudGVkIGluIEZpZ3VyZSAyLjEuCgpTdHVkaWVzIDFhLTFjIGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiBzdHJhdGVneSBmb3IgZWxpY2l0aW5nIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMsIHdoaWNoIGludm9sdmVkIGFza2luZyBwYXJ0aWNpcGFudHMgdG8gYXNzZXNzIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiBiZWV0bGVzIGFuZCByb2JvdHMuIEluIFN0dWRpZXMgMWEgYW5kIDFiLCBwYXJ0aWNpcGFudHMgKFN0dWR5IDFhOiBfbl89NDA1IFVTIGFkdWx0czsgU3R1ZHkgMWI6IF9uXz00MDYgVVMgYWR1bHRzKSB3ZXJlIHJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBvbmUgb2YgdGhlc2UgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIG9uIGFsbCA0MCBtZW50YWwgY2FwYWNpYXRpZXMuIEluIFN0dWR5IDFjLCBfbl89NDAwIFVTIGFkdWx0cyB3ZXJlIGFza2VkIHRvIGFzc2VzcyBib3RoIHRhcmdldCBjaGFyYWN0ZXJzLCBwcmVzZW50ZWQgc2lkZS1ieS1zaWRlIHdpdGggbGVmdC1yaWdodCBvcmRlciBkZXRlcm1pbmVkIHJhbmRvbWx5LCBvbiBhbGwgNDAgbWVudGFsIGNhcGFjaWF0aWVzLgoKU3R1ZHkgMWQgZW1wbG95ZWQgdGhlICJkaXZlcnNlIGNoYXJhY3RlcnMiIHN0cmF0ZWd5IGZvciBlbGljaXRpbmcgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucywgd2hpY2ggaW4gdGhpcyBjYXNlIGludm9sdmVkIGFza2luZyBwYXJ0aWNpcGFudHMgdG8gYXNzZXNzIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiAyMSB0YXJnZXQgY2hhcmFjdGVycywgc3Bhbm5pbmcgYSB3aWRlIHJhbmdlIG9mIHBvdGVudGlhbCBtZW50YWwgY2FwYWNpdHkgcHJvZmlsZXMuIFRoZSBsaXN0IG9mIGNoYXJhY3RlcnMgYWdhaW4gaW5jbHVkZWQgYSBiZWV0bGUgYW5kIGEgcm9ib3QgKGFzIGluIFN0dWRpZXMgMWEtMWMpLCBhcyB3ZWxsIGFzIGEgc3RhcGxlciwgYSBjYXIsIGEgY29tcHV0ZXIsIGEgbWljcm9iZSwgYSBmaXNoLCBhIGJsdWUgamF5LCBhIGZyb2csIGEgbW91c2UsIGEgZ29hdCwgYSBkb2csIGEgYmVhciwgYSBkb2xwaGluLCBhbiBlbGVwaGFudCwgYSBjaGltcGFuemVlLCBhIGZldHVzLCBhIHBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSwgYW4gaW5mYW50LCBhIGNoaWxkLCBhbmQgYW4gYWR1bHQuIEluIFN0dWR5IDFkLCBfbl89NDMxIFVTIGFkdWx0cyB3ZXJlIHJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBvbmUgb2YgdGhlc2UgMjEgdGFyZ2V0IGNoYXJhY3RlcnMgb24gYWxsIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiAKCiFbRmlndXJlIDIuMTogVGFyZ2V0IGNoYXJhY3RlcnMgdXNlZCBpbiBTdHVkaWVzIDFhLTFkLCBwcmVzZW50ZWQgd2l0aCB0aGUgdmVyYmFsIGxhYmVsIHVzZWQgdG8gZGVzY3JpYmUgZWFjaCBjaGFyYWN0ZXIuIEh1bWFuIGNoYXJhY3RlcnMgYXJlIHByZXNlbnRlZCBpbiB0aGUgZmlyc3Qgcm93LCBub24taHVtYW4gbWFtbWFscyBpbiB0aGUgc2Vjb25kIHJvdywgbm9uLW1hbW1hbCBhbmltYWxzIGluIHRoZSB0aGlyZCByb3csIGFuZCBpbmVydCBvYmplY3RzIGluIHRoZSBmb3VydGggcm93LiBTdHVkaWVzIDFhLTFjIGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgYXNzZXNzZWQgdGhlIG1lbnRhbCBjYXBhY2l0aWVzIG9mIGJlZXRsZXMgYW5kIHJvYm90czsgdGhlc2UgY2hhcmFjdGVycyBhcmUgaW5kaWNhdGVkIHdpdGggYSBibGFjayBib3JkZXIuIFN0dWR5IDFkIGVtcGxveWVkIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgYXNzZXNzZWQgdGhlIHdpZGUgdmFyaWV0eSBvZiB0YXJnZXQgY2hhcmFjdGVycyBwcmVzZW50ZWQgaGVyZS4gTm90ZSB0aGF0IHRoZSBwaWN0dXJlIHVzZWQgdG8gaWxsdXN0cmF0ZSB0aGUgcm9ib3QgY2hhcmFjdGVyIHZhcmllZCBiZXR3ZWVuIFN0dWRpZXMgMWEtMWMgdnMuIFN0dWR5IDFkLl0oZGVzaWduL3RhcmdldCBjaGFyYWN0ZXJzL3RhcmdldCBjaGFyYWN0ZXJzLjAwMS5qcGVnKQoKIyMjIERhdGEgcHJvY2Vzc2luZwoKQWxsIGFuYWx5c2VzIHdlcmUgY29uZHVjdGVkIG9uIHJhdyBkYXRhLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlcyB3ZXJlIHJlY29yZGVkIGFzIGludGVnZXJzIGJldHdlZW4gMC02LiBBbGwgcGFydGljaXBhbnRzIHdlcmUgcmVxdWlyZWQgdG8gYW5zd2VyIGFsbCB0cmlhbHMsIGFuZCByZXNwb25zZSB0aW1lcyB3ZXJlIG5vdCByZWNvcmRlZCwgc28gdGhlcmUgd2VyZSB0cmlhbHMgd2l0aCBtaXNzaW5nIGRhdGEuCgoKYGBge3J9CnRhYmxlMi4xIDwtIHJlYWRfY3N2KCIuL2Rlc2lnbi9tZW50YWxfY2FwX2xpc3QuY3N2IikgJT4lCiAgYXJyYW5nZShjYXRfb3JkZXJfV0RNMjAxNywgbGlzdF9vcmRlcl9XRE0yMDE3KSAlPiUKICBzZWxlY3Qoc3RhcnRzX3dpdGgoInN0dWR5IiksIGRlZmluaXRpb25fUzIzLCBkZWZpbml0aW9uX1M0KSAlPiUKICByZW5hbWUoYERlZmluaXRpb24gKFN0dWRpZXMgMi0zKWAgPSBkZWZpbml0aW9uX1MyMywKICAgICAgICAgYERlZmluaXRpb24gKFN0dWR5IDQpYCA9IGRlZmluaXRpb25fUzQpICU+JQogIG11dGF0ZV9hbGwoZnVucyhyZXBsYWNlX25hKC4sICItIikpKSAlPiUKICBrYWJsZShmb3JtYXQgPSAiaHRtbCIsICNhbGlnbiA9IGMoImwiLCByZXAoInIiLCAzKSksCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSAyLjE6IE1lbnRhbCBjYXBhY2l0eSBpdGVtcyB1c2VkIGluIFN0dWRpZXMgMS00LiBDYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGUgYSBwcmlvcmkgY2F0ZWdvcmllcyB0aGF0IGd1aWRlZCB0aGUgaW5pdGlhbCBleHBsb3JhdGlvbiBvZiByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgaW4gU3R1ZHkgMSAoYXMgcHVibGlzaGVkIGluIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSW4gU3R1ZGllcyAyLTQsIGVhY2ggaXRlbSB3YXMgYXNzb2NpYXRlZCB3aXRoIGEgcHJlc2V0IGRlZmluaXRpb24gKGxlZnRtb3N0IGNvbHVtbikuIEZvciBpdGVtcyBtYXJrZWQgd2l0aCBhbiBhc3RlcmlzaywgdGhpcyBkZWZpbml0aW9uIHdhcyBwcm92aWRlZCB0byBhbGwgcGFydGljaXBhbnRzOyBvdGhlcndpc2UsIGl0IHdhcyBwcm92aWRlZCB0byBjaGlsZHJlbiAoYnV0IG5vdCBhZHVsdHMpIG9ubHkgaWYgdGhleSBpbmRpY2F0ZWQgdGhhdCB0aGV5IGRpZCBub3QgdW5kZXJzdGFuZCB0aGUgcXVlc3Rpb24uIEZvciBhIHN1YnNldCBvZiBwYXJ0aWNpcGFudHMgaW4gU3R1ZHkgMywgdHdvIGFkZGl0aW9uYWwgcXVlc3Rpb25zIHdlcmUgYXNrZWQgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBzdHVkeSAobGlzdGVkIHVuZGVyICdBZGRpdGlvbmFsIHF1ZXN0aW9ucyAoU3R1ZHkgMykuJyBTdHVkeSA0IGluY2x1ZGVkIGZvdXIgYWRkaXRpb25hbCBpdGVtcyB0aGF0IGRpZCBub3QgYWxpZ24gd2l0aCBpdGVtcyB1c2VkIGluIFN0dWRpZXMgMS0zIChsaXN0ZWQgdW5kZXIgJ05ldyBpdGVtcyAoU3R1ZHkgNCknKS4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQWZmZWN0aXZlIGV4cGVyaWVuY2VzIChwZXIgV2Vpc21hbiBldCBhbC4sIDIwMTcpIiwgMSwgNikgJT4lCiAgZ3JvdXBfcm93cygiUGVyY2VwdHVhbCBhYmlsaXRpZXMgKHBlciBXZWlzbWFuIGV0IGFsLiwgMjAxNykiLCA3LCAxMSkgJT4lCiAgZ3JvdXBfcm93cygiUGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIChwZXIgV2Vpc21hbiBldCBhbC4sIDIwMTcpIiwgMTIsIDE2KSAlPiUKICBncm91cF9yb3dzKCJDb2duaXRpdmUgYWJpbGl0aWVzIChwZXIgV2Vpc21hbiBldCBhbC4sIDIwMTcpIiwgMTcsIDIxKSAlPiUKICBncm91cF9yb3dzKCJBZ2VudGljIGNhcGFjaXRpZXMgKHBlciBXZWlzbWFuIGV0IGFsLiwgMjAxNykiLCAyMiwgMjYpICU+JQogIGdyb3VwX3Jvd3MoIlNvY2lhbCBhYmlsaXRpZXMgKHBlciBXZWlzbWFuIGV0IGFsLiwgMjAxNykiLCAyNywgMzMpICU+JQogIGdyb3VwX3Jvd3MoIk90aGVyL21pc2NlbGxhbmVvdXMgKHBlciBXZWlzbWFuIGV0IGFsLiwgMjAxNykiLCAzNCwgNDApICU+JQogIGdyb3VwX3Jvd3MoIkFkZGl0aW9uYWwgcXVlc3Rpb25zIChTdHVkeSAzKSIsIDQxLCA0MikgJT4lCiAgZ3JvdXBfcm93cygiTmV3IGl0ZW1zIChTdHVkeSA0KSIsIDQzLCA0NikKYGBgCgpgYGB7ciB0YWJsZTIuMSwgaW5jbHVkZSA9IFR9CnRhYmxlMi4xCmBgYAoKCiMjIFN0dWR5IDI6IENvbmNlcHR1YWwgY2hhbmdlIGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgYW5kIGFkdWx0aG9vZAoKVGhlIGdvYWwgb2YgU3R1ZHkgMiB3YXMgdG8gZGV2ZWxvcCBhbiBleHBlcmltZW50YWwgcGFyYWRpZ20gc2ltaWxhciB0byB0aGF0IGVtcGxveWVkIGluIFN0dWR5IDEgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIGV4cGxvcmUgdGhlIGRldmVsb3BtZW50IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGFtb25nIGNoaWxkcmVuLCBhbmQgdG8gY29uZHVjdCBhbiBpbml0aWFsIGV4cGxvcmF0aW9uIG9mIHRoZXNlIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIGluIG1pZGRsZSBjaGlsZGhvb2QuIFN0dWR5IDIgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHN0cmF0ZWd5IHVzZWQgaW4gU3R1ZGllcyAxYS0xYywgd2l0aCBwYXJ0aWNpcGFudHMgYXNrZWQgdG8gcmVhc29uIGFib3V0IHRoZSBtZW50YWwgbGl2ZXMgb2YgZWl0aGVyIGEgYmVldGxlIG9yIGEgcm9ib3QuIAoKUGlsb3QgdGVzdGluZyBzdWdnZXN0ZWQgdGhhdCBjaGlsZHJlbiBhcyB5b3VuZyBhcyA3IHllYXJzIG9mIGFnZSBmb3VuZCB0aGUgcGFyYWRpZ20gZWFzeSBhbmQgZW5qb3lhYmxlLCBhbmQgd29yayBvbiB0aGUgZGV2ZWxvcG1lbnQgb2YgbGF5IGJpb2xvZ3kgYW5kIHBzeWNob2xvZ3kgaGFzIHN1Z2dlc3RlZCB0aGF0IHRoZXNlIGNvbmNlcHRzIG1heSBjb250aW51ZSB0byBkZXZlbG9wIHdlbGwgaW50byBtaWRkbGUgY2hpbGRob29kIChlLmcuLCBYWCBDSVRFIENhcmV5LCAxOTg1OyBIYXRhbm8gJiBJbmFnYWtpLCAxOTk3OyBQaWFnZXQsIDE5Mjk7IGNmLiBHZWxtYW4gJiBPcGZlciwgMjAwMikuIFRodXMsIEkgdGFyZ2V0ZWQgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBmb3IgdGhlIGZpcnN0IGNoaWxkIHNhbXBsZS4gSSBhbHNvIHJlY3J1aXRlZCBhIGdyb3VwIG9mIGFkdWx0cyB0byB2YWxpZGF0ZSB0aGlzIGNoaWxkLSBmcmllbmRseSBwYXJhZGlnbSwgaS5lLiwgdG8gZXZhbHVhdGUgd2hldGhlciBpdCByZXBsaWNhdGVkIHRoZSByZXN1bHRzIG9mIFN0dWR5IDEgKFhYIENJVEUgV2Vpc21hbiBldCBhbC4sIDIwMTcpLgoKUmVjYWxsIHRoYXQsIGluIFN0dWR5IDEsIGFkdWx0IHBhcnRpY2lwYW50cyBldmFsdWF0ZWQgdGFyZ2V0IGNoYXJhY3RlcnMgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMgdXNpbmcgYSBzZXZlbi1wb2ludCBMaWtlcnQtdHlwZSBzY2FsZS4gUGlsb3QgdGVzdGluZyBzdWdnZXN0ZWQgdHdvIG5lY2Vzc2FyeSBtb2RpZmljYXRpb25zIGZvciBjaGlsZHJlbjogcmV3b3JkaW5nIHNvbWUgb2YgdGhlIG1lbnRhbCBjYXBhY2l0eSBpdGVtcywgYW5kIHVzaW5nIGEgc2ltcGxlciByZXNwb25zZSBzY2FsZSBmZWF0dXJpbmcgb25seSB0aHJlZSAocmF0aGVyIHRoYW4gc2V2ZW4pIHJlc3BvbnNlIG9wdGlvbnM6IF9ub18sIF9raW5kYV8sIG9yIF95ZXNfLiBUaGlzIHRydW5jYXRlZCBzY2FsZSBhbGxvd2VkIGNoaWxkcmVuIHRvIG1vdmUgZmFzdCBlbm91Z2ggdGhyb3VnaCB0aGUgc3R1ZHkgdG8gYW5zd2VyIGFsbCA0MCBtZW50YWwgY2FwYWNpdHkgcXVlc3Rpb25z4oCUYSB0aGUgdG9wIHByaW9yaXR5IGluIHRoZSBkZXNpZ24gb2YgdGhlc2Ugc3R1ZGllcyAoYXMgZGlzY3Vzc2VkIGluIHRoZSBvcGVuaW5nIHNlY3Rpb24gb2YgdGhpcyBjaGFwdGVyKS4KCiMjIyBQYXJ0aWNpcGFudHMKCkluIHRvdGFsLCBgciBucm93KGQxX2FkX3dpZGUpICsgbnJvdyhkMV83OV93aWRlKWAgcGVvcGxlIHBhcnRpY2lwYXRlZCBpbiB0aGlzIHN0dWR5LgoKYGBge3J9CiMgZGVtb2dyYXBoaWNzCmQxX2FkX2dlbmRlciA8LSBkZW1vX2Z1bihkMV9hZCwgImdlbmRlciIsIDIpCmQxX2FkX2V0aG5pY2l0eSA8LSBkZW1vX2Z1bihkMV9hZCwgImV0aG5pY2l0eV9jYXQiLCAyKQpkMV9hZF9lbmdsaXNoIDwtIGRlbW9fZnVuKGQxX2FkLCAiZW5nbGlzaE5hdGl2ZSIsIDIpCmBgYAoKQWR1bHRzIChfbl89YHIgbnJvdyhkMV9hZF93aWRlKWApIHBhcnRpY2lwYXRlZCB2aWEgTVR1cmsgaW4gSnVseSAyMDE2LiBBZHVsdCBwYXJ0aWNpcGFudHMgaGFkIGdhaW5lZCBhcHByb3ZhbCBmb3IgYXQgbGVhc3QgOTUlIG9mIHRoZWlyIHByZXZpb3VzIHdvcmsgb24gTVR1cms7IGhhZCBNVHVyayBhY2NvdW50cyBiYXNlZCBpbiB0aGUgVVM7IGFuZCBpbmRpY2F0ZWQgdGhhdCB0aGV5IHdlcmUgYXQgbGVhc3QgMTggeWVhcnMgb2xkLiBBZHVsdHMgd2VyZSBwYWlkIFwkMC4zMCBmb3IgYXBwcm94aW1hdGVseSAyLTMgbWludXRlcyBvZiB0aGVpciB0aW1lIChtZWRpYW4gZHVyYXRpb246IGByIHN1bW1hcnkoZDFfYWQkZHVyYXRpb24pWyJNZWRpYW4iXSAlPiUgcm91bmQoMilgIG1pbikuIAoKQWNjb3JkaW5nIHRvIHNlbGYgcmVwb3J0LCB0aGUgYWR1bHQgc2FtcGxlIHJhbmdlZCBpbiBhZ2UgZnJvbSBgciBzdW1tYXJ5KGQxX2FkJGFnZSlbIk1pbi4iXWAtYHIgc3VtbWFyeShkMV9hZCRhZ2UpWyJNYXguIl1gIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDFfYWQkYWdlKVsiTWVkaWFuIl1geSkgYW5kIHdhcyByb3VnaGx5IHNwbGl0IGJldHdlZW4gd29tZW4gKGByIGQxX2FkX2dlbmRlciRwcm9wW2QxX2FkX2dlbmRlciRnZW5kZXI9PSJmZW1hbGUiXSAqIDEwMGAlKSBhbmQgbWVuIChgciBkMV9hZF9nZW5kZXIkcHJvcFtkMV9hZF9nZW5kZXIkZ2VuZGVyPT0ibWFsZSJdICogMTAwYCU7IGByIGQxX2FkX2dlbmRlciRwcm9wW2QxX2FkX2dlbmRlciRnZW5kZXI9PSJvdGhlcl9wcmVmTm8iXSAqIDEwMGAlIG9mIHBhcnRpY2lwYW50cyBpZGVudGlmaWVkIGFzIHNvbWUgb3RoZXIgZ2VuZGVyIG9yIG9wdGVkIG5vdCB0byBkaXNjbG9zZSkuIEFkdWx0cyBwcmVkb21pbmFudGx5IGlkZW50aWZpZWQgYXMgV2hpdGUgKGByIGQxX2FkX2V0aG5pY2l0eSRwcm9wW2QxX2FkX2V0aG5pY2l0eSRldGhuaWNpdHlfY2F0PT0id2hpdGUiXSAqIDEwMGAlOyBgciBkMV9hZF9ldGhuaWNpdHkkcHJvcFtkMV9hZF9ldGhuaWNpdHkkZXRobmljaXR5X2NhdD09Im11bHRpIl0gKiAxMDBgJSBpZGVudGlmaWVkIGFzIG1vcmUgdGhhbiBvbmUgcmFjZS9ldGhuaWNpdHksIGFuZCAkXGxlcSQgYHIgZGF0YS5mcmFtZShkMV9hZF9ldGhuaWNpdHkgJT4lIGZpbHRlcighZXRobmljaXR5X2NhdCAlaW4lIGMoIndoaXRlIiwgIm11bHRpIikpKSRwcm9wICU+JSBtYXgoKSAqIDEwMGAlIGFzIGFueSBvdGhlciByYWNlL2V0aG5pY2l0eSkuIFRoZSB2YXN0IG1ham9yaXR5IG9mIGFkdWx0cyByZXBvcnRlZCBFbmdsaXNoIGJlaW5nIHRoZWlyIG9ubHkgbmF0aXZlIGxhbmd1YWdlIChgciBkMV9hZF9lbmdsaXNoJHByb3BbZDFfYWRfZW5nbGlzaCRlbmdsaXNoTmF0aXZlID09ICJ5ZXNfb25seSJdICogMTAwYCU7IGFuIGFkZGl0aW9uYWwgYHIgZDFfYWRfZW5nbGlzaCRwcm9wW2QxX2FkX2VuZ2xpc2gkZW5nbGlzaE5hdGl2ZSA9PSAieWVzX211bHRpcGxlIl0gKiAxMDBgJSBpbmRpY2F0ZWQgdGhhdCBFbmdsaXNoIHdhcyBvbmUgb2YgbXVsdGlwbGUgbmF0aXZlIGxhbmd1YWdlcyBmb3IgdGhlbS4pCgpgYGB7cn0KIyBkZW1vZ3JhcGhpY3MKZDFfNzlfZ2VuZGVyIDwtIGRlbW9fZnVuKGQxXzc5LCAiZ2VuZGVyIiwgMikKZDFfNzlfZXRobmljaXR5IDwtIGRlbW9fZnVuKGQxXzc5LCAiZXRobmljaXR5IiwgMikKZDFfNzlfYmlsaW5ndWFsIDwtIGRlbW9fZnVuKGQxXzc5LCAiYmlsaW5ndWFsIiwgMikKYGBgCgpDaGlsZHJlbiAoX25fPWByIG5yb3coZDFfNzlfd2lkZSlgKSBwYXJ0aWNpcGF0ZWQgYXQgb25lIG9mIHNldmVyYWwgU2FuIEZyYW5jaXNjbyBCYXkgQXJlYSBtdXNldW1zIG9yIGF0IHRoZWlyIHlvdW5nZXIgc2libGluZydzIHByZXNjaG9vbCBiZXR3ZWVuIEp1bHktRGVjZW1iZXIgMjAxNi4gVGhlIHN0dWR5IHRvb2sgbW9zdCBjaGlsZHJlbiB1bmRlciAxMCBtaW51dGVzIHRvIGNvbXBsZXRlIChtZWRpYW4gZHVyYXRpb246IGByIHN1bW1hcnkoZDFfNzkkZHVyYXRpb24pWyJNZWRpYW4iXSAlPiUgcm91bmQoMilgIG1pbikuIEFuIGFkZGl0aW9uYWwgMTIgY2hpbGRyZW4gcGFydGljaXBhdGVkIGJ1dCB3ZXJlIGV4Y2x1ZGVkIGZvciBiZWluZyBvdXRzaWRlIHRoZSB0YXJnZXQgYWdlIHJhbmdlIChfbl89NyksIGJlaW5nIG9mIHVua25vd24gYWdlIChfbl89NCksIG9yIGJlaW5nIHNob3duIGEgdGFyZ2V0IGNoYXJhY3RlciBvdGhlciB0aGFuIGEgYmVldGxlIG9yIGEgcm9ib3QgKF9uXz0xKS4gQ2hpbGRyZW4gcmVjZWl2ZWQgYSBzbWFsbCB0aGFuay15b3UgZ2lmdCAoZS5nLiwgYSBzdGlja2VyKSBmb3IgdGhlaXIgcGFydGljaXBhdGlvbi4gCgpDaGlsZHJlbiByYW5nZWQgaW4gYWdlIGZyb20gYHIgc3VtbWFyeShkMV83OSRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpYC1gciBzdW1tYXJ5KGQxXzc5JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDFfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYHkpLiBBY2NvcmRpbmcgdG8gcGFyZW50YWwgcmVwb3J0LCB0aGUgY2hpbGQgc2FtcGxlIGluY2x1ZGVkIHNsaWdodGx5IG1vcmUgZ2lybHMgKGByIGQxXzc5X2dlbmRlciRwcm9wW2QxXzc5X2dlbmRlciRnZW5kZXI9PSJmIl0gKiAxMDBgJSkgdGhhbiBib3lzIChgciBkMV83OV9nZW5kZXIkcHJvcFtkMV83OV9nZW5kZXIkZ2VuZGVyPT0ibSJdICogMTAwYCU7IGByIGQxXzc5X2dlbmRlciRwcm9wW2QxXzc5X2dlbmRlciRnZW5kZXI9PSJNSVNTSU5HIl0gKiAxMDBgJSBvZiBjaGlsZHJlbidzIGdlbmRlciB3YXMgbm9uLWJpbmFyeSBvciB1bmtub3duKS4gUGFyZW50cyBwcmVkb21pbmFudGx5IGlkZW50aWZpZWQgdGhlaXIgY2hpbGRyZW4gYXMgV2hpdGUgKGByIGQxXzc5X2V0aG5pY2l0eSRwcm9wW2QxXzc5X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJ3aGl0ZSJdICogMTAwYCUpLCBtdWx0aXJhY2lhbCAoYHIgZDFfNzlfZXRobmljaXR5JHByb3BbZDFfNzlfZXRobmljaXR5JGV0aG5pY2l0eT09Im11bHRpIl0gKiAxMDBgJSksIEVhc3QgQXNpYW4gKGByIGQxXzc5X2V0aG5pY2l0eSRwcm9wW2QxXzc5X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJlYXN0IGFzaWFuIl0gKiAxMDBgJSksIG9yIFNvdXRoIEFzaWFuIChgciBkMV83OV9ldGhuaWNpdHkkcHJvcFtkMV83OV9ldGhuaWNpdHkkZXRobmljaXR5PT0ic291dGggb3Igc291dGhlYXN0IGFzaWFuIl0gKiAxMDBgJTsgJFxsZXEkIGByIGRhdGEuZnJhbWUoZDFfNzlfZXRobmljaXR5ICU+JSBmaWx0ZXIoIWV0aG5pY2l0eSAlaW4lIGMoIndoaXRlIiwgIm11bHRpIiwgImVhc3QgYXNpYW4iLCAic291dGggb3Igc291dGhlYXN0IGFzaWFuIiwgIk1JU1NJTkciKSkpJHByb3AgJT4lIG1heCgpICogMTAwYCUgb2YgY2hpbGRyZW4gd2VyZSBpZGVudGlmaWVkIGFzIGFueSBvdGhlciByYWNlL2V0aG5pY2l0eSwgYW5kIGByIGQxXzc5X2V0aG5pY2l0eSRwcm9wW2QxXzc5X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJNSVNTSU5HIl0gKiAxMDBgJSBvZiBjaGlsZHJlbidzIHJhY2UvZXRobmljaXR5IHdhcyB1bmtub3duKS4gUm91Z2hseSBoYWxmIG9mIHBhcmVudHMgKGByIGQxXzc5X2JpbGluZ3VhbCRwcm9wW2QxXzc5X2JpbGluZ3VhbCRiaWxpbmd1YWw9PSJ5ZXMiXSAqIDEwMGAlKSByZXBvcnRlZCB0aGF0IHRoZWlyIGNoaWxkIHdhcyBiaWxpbmd1YWwgKHRob3VnaCwgYW5lY2RvdGFsbHksIHBhcmVudHMnIGludGVycHJldGF0aW9ucyBvZiAiYmlsaW5ndWFsIiByYW5nZWQgZnJvbSB0YWtpbmcgY2xhc3NlcyBhdCBzY2hvb2wgdG8gc3BlYWtpbmcgYSBsYW5nYXVnZSBhdCBob21lKS4KCiMjIyBNYXRlcmlhbHMgYW5kIHByb2NlZHVyZQoKU3R1ZHkgMiBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaDogUGFydGljaXBhbnRzIHdlcmUgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiBlaXRoZXIgYSBiZWV0bGUgKF9uXz1gciBkMV9hZCAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSAiYmVldGxlIikgJT4lIGRpc3RpbmN0KHN1YmlkKSAlPiUgbnJvdygpYCBhZHVsdHMsIF9uXz1gciBkMV83OSAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSAiYmVldGxlIikgJT4lIGRpc3RpbmN0KHN1YmlkKSAlPiUgbnJvdygpYCBjaGlsZHJlbikgb3IgYSByb2JvdCAoX25fPWByIGQxX2FkICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpICU+JSBkaXN0aW5jdChzdWJpZCkgJT4lIG5yb3coKWAgYWR1bHRzLCBfbl89YHIgZDFfNzkgJT4lIGZpbHRlcihjaGFyYWN0ZXIgPT0gInJvYm90IikgJT4lIGRpc3RpbmN0KHN1YmlkKSAlPiUgbnJvdygpYCBjaGlsZHJlbikuIFRoZSBpbWFnZXMgdXNlZCB0byBkZXBpY3QgdGhlc2UgdGFyZ2V0IGNoYXJhY3RlcnMgYXJlIHByZXNlbnRlZCBpbiBGaWd1cmUgMi4yLgoKIVtGaWd1cmUgMi4yOiBUYXJnZXQgY2hhcmFjdGVycyB1c2VkIGluIFN0dWRpZXMgMi0zLCBwcmVzZW50ZWQgd2l0aCB0aGUgdmVyYmFsIGxhYmVsIHVzZWQgdG8gZGVzY3JpYmUgZWFjaCBjaGFyYWN0ZXIuIEFuaW1hbCBjaGFyYWN0ZXJzIGFyZSBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHJvdywgYW5kIGluZXJ0IG9iamVjdHMgaW4gdGhlIHNlY29uZCByb3cuIFN0dWRpZXMgMiBhbmQgNCBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgaW4gd2hpY2ggcGFydGljaXBhbnRzIGFzc2Vzc2VkIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiBiZWV0bGVzIGFuZCByb2JvdHM7IHRoZXNlIGNoYXJhY3RlcnMgYXJlIGluZGljYXRlZCB3aXRoIGEgYmxhY2sgYm9yZGVyLiBTdHVkeSAyIGVtcGxveWVkIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgYXNzZXNzZWQgdGhlIHdpZGVyIHJhbmdlIG9mIHRhcmdldCBjaGFyYWN0ZXJzIHByZXNlbnRlZCBoZXJlLl0oZGVzaWduL3RhcmdldCBjaGFyYWN0ZXJzL3RhcmdldCBjaGFyYWN0ZXJzLjAwMi5qcGVnKQoKSW5zdHJ1Y3Rpb25zIHRvIHBhcnRpY2lwYW50cyBmb2N1c2VkIG9uIHRoZSBpZGVhIHRoYXQgdGhlIHJlc2VhcmNoIHRlYW0gd2FudGVkIHRvIGtub3cgd2hhdCBwYXJ0aWNpcGFudHMgdGhvdWdodCAiW2JlZXRsZXMvcm9ib3RzXSBjYW4gZG8gYW5kIGNhbiBub3QgZG8uIiBQYXJ0aWNpcGFudHMgcmF0ZWQgdGhlIHRhcmdldCBjaGFyYWN0ZXIgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMsIHByZXNlbnRlZCBpbiBhIHJhbmRvbSBvcmRlciBmb3IgZWFjaCBwYXJ0aWNpcGFudC4gT24gZWFjaCB0cmlhbCwgcGFydGljaXBhbnRzIHJlc3BvbmRlZCBfbm9fLCBfa2luZGFfLCBvciBfeWVzXyB0byB0aGUgcXVlc3Rpb24gIkRvIHlvdSB0aGluayBhIFtiZWV0bGUvcm9ib3RdIGNhbi4uLj8iIFRoZSB0aHJlZSByZXNwb25zZSBvcHRpb25zIHdlcmUgdmlzaWJsZSB0aHJvdWdob3V0IHRoZSBleHBlcmltZW50LgoKVGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIHdlcmUgZGVzaWduZWQgdG8gYmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2UgaW4gU3R1ZHkgMSwgd2hpbGUgYmVpbmcgY29tcHJlaGVuc2libGUgdG8gY2hpbGRyZW4gaW4gZWFybHkgZWxlbWVudGFyeSBzY2hvb2wuIEFzIGluIFN0dWR5IDEsIGVhY2ggYSBwcmlvcmkgY2F0ZWdvcnkgaW5jbHVkZWQgYXQgbGVhc3QgZml2ZSBpdGVtcyBvZiB2YXJ5aW5nIHZhbGVuY2UsIGNvbXBsZXhpdHksIGFuZCBwaHJhc2luZzsgc2VlIFRhYmxlIDIuMS4KCkVhY2ggaXRlbSB3YXMgYXNzb2NpYXRlZCB3aXRoIGEgcHJlLXNldCBkZWZpbml0aW9uIG9yIGV4cGxhbmF0aW9uLCB0byBhbGxvdyB0aGUgZGF0YSBjb2xsZWN0aW9uIHRlYW0gdG8gYmUgY29uc2lzdGVudCBpbiBvdXIgcmVzcG9uc2VzIHRvIHBhcnRpY2lwYW50cyAocGFydGljdWxhcmx5IGNoaWxkcmVuKSBpZiB0aGV5IGFza2VkIGZvciBjbGFyaWZpY2F0aW9uOyBzZWUgVGFibGUgMi4xLiBDaGlsZHJlbiB3ZXJlIGVuY291cmFnZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3R1ZHkgdG8gYXNrIHF1ZXN0aW9ucyBpZiB0aGV5IGRpZCBub3Qga25vdyB3aGF0IGEgd29yZCBtZWFudCwgaW4gd2hpY2ggY2FzZSB0aGV5IGdpdmVuIHRoZXNlIGRlZmluaXRpb25zOyBhZHVsdHMgd2VyZSB0b2xkIHRoYXQgdGhleSBjb3VsZCBhY2Nlc3MgdGhlc2UgZGVmaW5pdGlvbnMgYnkgaG92ZXJpbmcgb3ZlciB0aGUgdGV4dCBvbiB0aGUgY29tcHV0ZXIgc2NyZWVuLiBQaWxvdCB0ZXN0aW5nIHN1Z2dlc3RlZCB0aGF0IHNldmVuIGl0ZW1zIHJlcXVpcmVkIGNsYXJpZmljYXRpb24gZm9yIG1vc3QgY2hpbGRyZW4sIHNvIHRoZXNlIGl0ZW1zIHdlcmUgYWx3YXlzIGFjY29tcGFuaWVkIGJ5IHRoZWlyIGRlZmluaXRpb25zIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJpYWwgKGZvciBib3RoIGFkdWx0cyBhbmQgY2hpbGRyZW4pLCBhcyBmb2xsb3dzOiBfaGF2ZSBhIHBlcnNvbmFsaXR5LCBsaWtlIHdoZW4gc29tZW9uZSBpcyBzaHkgYW5kIHNvbWVib2R5IGVsc2UgaXMgc2lsbHlfOyBfaGF2ZSBiZWxpZWZzLCBsaWtlIHdoZW4geW91IHRoaW5rIHNvbWV0aGluZyBpcyB0cnVlXzsgX2ZlZWwgcGxlYXN1cmUsIGxpa2Ugd2hlbiBzb21ldGhpbmcgZmVlbHMgcmVhbGx5IGdvb2RfOyBfaGF2ZSBkZXNpcmVzLCBsaWtlIHdoZW4geW91IHJlYWxseSB3YW50IHNvbWV0aGluZ187IF9oYXZlIHNlbGYtIGNvbnRyb2wsIGxpa2Ugd2hlbiB5b3Ugc3RvcCB5b3Vyc2VsZiBmcm9tIGRvaW5nIHNvbWV0aGluZyB5b3Ugc2hvdWxkbid0IGRvXzsgX2hhdmUgZ29hbHMsIGxpa2Ugd2hlbiB5b3UncmUgdHJ5aW5nIGhhcmQgdG8gZG8gc29tZXRoaW5nIG9yIG1ha2Ugc29tZXRoaW5nIGhhcHBlbl87IGFuZCBfZmVlbCBzaWNrLCBsaWtlIHdoZW4geW91IGZlZWwgbGlrZSB5b3UgbWlnaHQgdGhyb3cgdXBfLiAKCkFkdWx0cyBjb21wbGV0ZWQgdGhlIHN0dWR5IGJ5IGNsaWNraW5nIHRocm91Z2ggYSB3ZWJzaXRlIGF0IHRoZWlyIG93biBwYWNlLCB3aXRoIG9uZSB0cmlhbCBwcmVzZW50ZWQgb24gZWFjaCBwYWdlIGFuZCBubyBhYmlsaXR5IHRvIGdvIGJhY2t3YXJkcy4gQ2hpbGRyZW4gY29tcGxldGVkIHRoZSBzdHVkeSBvbiBhbiBleHBlcmltZW50ZXIncyBsYXB0b3AgY29tcHV0ZXIuIFRoZSBleHBlcmltZW50ZXIgcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgZmlyc3Qgc2V2ZXJhbCB0cmlhbHMgb3V0IGxvdWQsIHJlcXVlc3RpbmcgdmVyYmFsIHJlc3BvbnNlcyBmcm9tIHRoZSBjaGlsZCBhbmQgc2VsZWN0ZWQgaGlzIG9yIGhlciByZXNwb25zZSBmb3IgaGVyOyBhZnRlciBzZXZlcmFsIHRyaWFscywgdGhlIGV4cGVyaW1lbnRlciBnYXZlIHRoZSBjaGlsZCB0aGUgb3B0aW9uIHRvIGNvbnRpbnVlIGluZGVwZW5kZW50bHkgKHJlYWRpbmcgdGhlIHF1ZXN0aW9ucyBhbmQgc2VsZWN0aW5nIHRoZWlyIGFuc3dlcnMgdGhlbXNlbHZlcykgaWYgdGhleSBkZXNpcmVkLiBSb3VnaGx5IGhhbGYgb2YgcGFydGljaXBhbnRzIGNvbXBsZXRlZCB0aGUgcmVtYWluZGVyIG9mIHRoZSB0YXNrIGluZGVwZW5kZW50bHkuCgojIyMgRGF0YSBwcm9jZXNzaW5nCgpUcmlhbHMgd2l0aCByZXNwb25zZSB0aW1lcyB0aGF0IHdlcmUgZmFzdGVyIHRoYW4gYSBwcmVzZXQgY3JpdGVyaW9uIG9mIDI1MG1zIChfbl89MyBjaGlsZCB0cmlhbHMsIF9uXz05NyBhZHVsdCB0cmlhbHMpIHdlcmUgZHJvcHBlZCwgcGFydGljaXBhbnRzIHdlcmUgcmV0YWluZWQgcmVnYXJkbGVzcyBvZiBza2lwcGVkIHRyaWFscyAoX25fPTU1IGNoaWxkIHRyaWFscywgX25fPTEgYWR1bHQgdHJpYWwpLiBPdmVyYWxsLCBvbmx5IDElIG9mIGFkdWx0IHRyaWFscyBhbmQgMSUgb2YgY2hpbGQgdHJpYWxzIHdlcmUgbWlzc2luZyBkYXRhOyBpbiB0aGVzZSBjYXNlcywgSSBpbXB1dGVkIG1pc3NpbmcgdmFsdWVzIHVzaW5nIHRoZSBtZWRpYW4gYnkgdGFyZ2V0IGNoYXJhY3RlciwgY2FwYWNpdHksIGFuZCBhZ2UgZ3JvdXAuCgoKIyMgU3R1ZHkgMzogQ29uY2VwdHVhbCBjaGFuZ2Ugb3ZlciBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAoNC05eSkKClN0dWR5IHdhcyBkZXNpZ25lZCB3aXRoIHR3byBnb2FscyBpbiBtaW5kLiAgCgpGaXJzdCwgaXQgYWltZWQgdG8gZXh0ZW5kIHRoZSBmaW5kaW5ncyB3aXRoIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMiBieSBleHBhbmRpbmcgdGhlIGxpc3Qgb2YgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIHRvIGluY2x1ZGUgbm90IG9ubHkgdGhlIHR3byAiZWRnZSBjYXNlcyIgZnJvbSBTdHVkeSAyIChhIGJlZXRsZSBhbmQgYSByb2JvdCksIGJ1dCBhIGFsc28gYSB3aWRlciByYW5nZSBvZiBhbmltYXRlIGJlaW5ncyAoYSBiaXJkLCBhIGdvYXQsIGFuZCBhbiBlbGVwaGFudCkgYW5kIGluYW5pbWF0ZSBvYmplY3RzIChhIGNvbXB1dGVyLCBhIHRlZGR5IGJlYXIsIGFuZCBhIGRvbGwp4oCUaS5lLiwgYnkgbW92aW5nIGZyb20gdGhlICJlZGdlIGNhc2UiIHN0cmF0ZWd5IHRvIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiBzdHJhdGVneSBmb3IgZWxpY2l0aW5nIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuIAoKU2Vjb25kLCBTdHVkeSAzIGFzc2Vzc2VkIHRoZSBlYXJsaWVyIGRldmVsb3BtZW50IG9mIGNvbmNlcHR1YWwgc3RydWN0dXJlIGluIGEgZ3JvdXAgb2YgeW91bmdlciBjaGlsZHJlbjogNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbi4gVGhlIHRpbWUgZnJvbSA0LTYgeWVhcnMgaGFzIGJlZW4gaWRlbnRpZmllZCBhcyBhIHBlcmlvZCBvZiBkcmFtYXRpYyBkZXZlbG9wbWVudCBpbiBzZXZlcmFsIHJlbGV2YW50IGRvbWFpbnMuIEFzIGRlc2NyaWJlZCBpbiBDaGFwdGVyIEkgW1hYIE1BS0UgU1VSRSBUSElTIElTIFRSVUVdLCBtYW55IHN0dWRpZXMgaGF2ZSBkb2N1bWVudGVkIHNoaWZ0cyBpbiBjaGlsZHJlbidzIGFiaWxpdGllcyB0byB0YWtlIG90aGVycycgcGVyc3BlY3RpdmVzLCByZXByZXNlbnQgZmFsc2UgYmVsaWVmcywgYW5kIGludGVncmF0ZSByZXByZXNlbnRhdGlvbnMgb2YgaW50ZW50aW9ucyBhbmQgb3V0Y29tZXMgaW4gZXZhbHVhdGluZyBtb3JhbCByZXNwb25zaWJpbGl0eSAoZm9yIHJldmVpd3MsIHNlZSBYWCBDSVRFIEZsYXZlbGwsIDE5OTk7IFdlbGxtYW4sIDIwMTUpLiBUaGUgcHJlc2Nob29sIHllYXJzIGhhdmUgYWxzbyBiZWVuIHRoZSBmb2N1cyBvZiBhIHJpY2ggdHJhZGl0aW9uIG9mIHdvcmsgb24gbGF5IGJpb2xvZ3kgYW5kIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBleHRlbmRpbmcgYmFjayBuZWFybHkgYSBjZW50dXJ5IChlLmcuLCBYWCBDSVRFIENhcmV5LCAxOTg1OyBSLiBHZWxtYW4sIFNwZWxrZSwgJiBNZWNrLCAxOTgzOyBNZWRpbiwgV2F4bWFuLCBXb29kcmluZywgJiBXYXNoaW5hd2F0b2ssIDIwMTA7IFBpYWdldCwgMTkyOTsgZm9yIGEgcmV2aWV3LCBzZWUgUy4gR2VsbWFuICYgT3BmZXIsIDIwMDIpLiBBbGwgb2YgdGhlc2UgYWNjb3VudHMgbWFrZSB0aGUgY2FzZSB0aGF0IGJlY29taW5nIGEgc29waGlzdGljYXRlZCByZWFzb25lcuKAlGFuZCBwYXJ0aWN1bGFybHkgYSBzb3BoaXN0aWNhdGVkIHNvY2lhbCByZWFzb25lcuKAlHJlcXVpcmVzIHN1YnN0YW50aWFsIHJlZmluZW1lbnQgb2Ygb25lJ3MgcmVwcmVzZW50YXRpb25zIG9mIG90aGVycycgZXhwZXJpZW5jZXMsIGJlbGllZnMsIGRlc2lyZXMsIGFuZCBuZWVkcy4gTWlnaHQgdGhlc2UgcmVmaW5lbWVudHMgaW5jbHVkZSBjaGFuZ2VzIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4ncyBjb25jZXB0cyBvZiBtZW50YWwgbGlmZT8gCgojIyMgUGFydGljaXBhbnRzCgpBIHRvdGFsIG9mIGByIG5yb3coZDJfYWRfd2lkZSkgKyBucm93KGQyXzc5X3dpZGUpICsgbnJvdyhkMl80Nl93aWRlKWAgcGVvcGxlIHBhcnRpY2lwYXRlZCBpbiB0aGlzIHN0dWR5LCBpbmNsdWRpbmcgYSBncm91cCBvZiBhZHVsdHMsIGEgZ3JvdXAgb2YgIm9sZGVyIiBjaGlsZHJlbiAoNy05eSksIGFuZCBhIGdyb3VwIG9mICJ5b3VuZ2VyIiBjaGlsZHJlbiAoNC02eSkuCgpgYGB7cn0KIyBkZW1vZ3JhcGhpY3MKZDJfYWRfZ2VuZGVyIDwtIGRlbW9fZnVuKGQyX2FkLCAiZ2VuZGVyIiwgMikKZDJfYWRfZXRobmljaXR5IDwtIGRlbW9fZnVuKGQyX2FkLCAiZXRobmljaXR5X2NhdCIsIDIpCmBgYAoKQWR1bHRzIChfbl89YHIgbnJvdyhkMl9hZF93aWRlKWApIHBhcnRpY2lwYXRlZCB2aWEgTVR1cmsgaW4gU2VwdGVtYmVyIDIwMTguIEFkdWx0IHBhcnRpY2lwYW50cyBoYWQgZ2FpbmVkIGFwcHJvdmFsIGZvciBhdCBsZWFzdCA5NSUgb2YgdGhlaXIgcHJldmlvdXMgd29yayBvbiBNVHVyazsgaGFkIE1UdXJrIGFjY291bnRzIGJhc2VkIGluIHRoZSBVUzsgYW5kIGluZGljYXRlZCB0aGF0IHRoZXkgd2VyZSBhdCBsZWFzdCAxOCB5ZWFycyBvbGQuIEFkdWx0cyB3ZXJlIHBhaWQgXCQwLjQ1IGZvciBhcHByb3hpbWF0ZWx5IDItNCBtaW51dGVzIG9mIHRoZWlyIHRpbWUgKG1lZGlhbiBkdXJhdGlvbjogYHIgc3VtbWFyeShkMl9hZCRkdXJhdGlvbilbIk1lZGlhbiJdICU+JSByb3VuZCgyKWAgbWluKS4gQW4gYWRkaXRpb25hbCAyMiBhZHVsdHMgcGFydGljaXBhdGVkIGJ1dCB3ZXJlIGV4Y2x1ZGVkIGZvciBmYWlsaW5nIHRvIHJlc3BvbmQgc2Vuc2libHkgdG8gYW4gb3Blbi1lbmRlZCBxdWVzdGlvbiBhYm91dCB3aGF0IHRoZXkgaGFkIGJlZW4gYXNrZWQgdG8gZG8gaW4gdGhlIHN0dWR5IChlLmcuLCBjb3B5aW5nIGFuZCBwYXN0aW5nIHRleHQgZnJvbSB0aGUgcXVlc3Rpb24sIHdyaXRpbmcgImdvb2Qgc3R1ZHksIiBvciBkZXNjcmliaW5nIGEgZGlmZmVyZW50IHN0dWR5LCBlLmcuLCAiSSB3cm90ZSBhbiBlc3NheSBhYm91dCBuYXR1cmUiOyBfbl89MTEpIG9yIGZvciBmYWlsaW5nIHRvIHBhc3Mgb25lIG9yIG1vcmUgYXR0ZW50aW9uIGNoZWNrcyAoZS5nLiwgIlBsZWFzZSBzZWxlY3Qgbm8iOyBfbl89MTEpLiBBY2NvcmRpbmcgdG8gc2VsZiByZXBvcnQsIHRoZSBmaW5hbCBhZHVsdCBzYW1wbGUgcmFuZ2VkIGluIGFnZSBmcm9tIGByIHN1bW1hcnkoZDJfYWQkYWdlKVsiTWluLiJdYC1gciBzdW1tYXJ5KGQyX2FkJGFnZSlbIk1heC4iXWAgeWVhcnMgKG1lZGlhbjogYHIgc3VtbWFyeShkMl9hZCRhZ2UpWyJNZWRpYW4iXWB5KSBhbmQgaW5jbHVkZWQgc2xpZ2h0bHkgbW9yZSBtZW4gKGByIHJvdW5kKGQyX2FkX2dlbmRlciRwcm9wW2QyX2FkX2dlbmRlciRnZW5kZXI9PSJtIl0sIDIpICogMTAwYCUpIHRoYW4gd29tZW4gKGByIHJvdW5kKGQyX2FkX2dlbmRlciRwcm9wW2QyX2FkX2dlbmRlciRnZW5kZXI9PSJmIl0sIDIpICogMTAwYCUpLiBBZHVsdHMgcHJlZG9taW5hbnRseSBpZGVudGlmaWVkIGFzIFdoaXRlIChgciBkMl9hZF9ldGhuaWNpdHkkcHJvcFtkMl9hZF9ldGhuaWNpdHkkZXRobmljaXR5X2NhdD09IndoaXRlIl0gKiAxMDBgJTsgYHIgZDJfYWRfZXRobmljaXR5JHByb3BbZDJfYWRfZXRobmljaXR5JGV0aG5pY2l0eV9jYXQ9PSJtdWx0aSJdICogMTAwYCUgaWRlbnRpZmllZCBhcyBtb3JlIHRoYW4gb25lIHJhY2UvZXRobmljaXR5LCBhbmQgJFxsZXEkIGByIGRhdGEuZnJhbWUoZDJfYWRfZXRobmljaXR5ICU+JSBmaWx0ZXIoIWV0aG5pY2l0eV9jYXQgJWluJSBjKCJ3aGl0ZSIsICJtdWx0aSIpKSkkcHJvcCAlPiUgbWF4KCkgKiAxMDBgJSBhcyBhbnkgb3RoZXIgcmFjZS9ldGhuaWNpdHkpLgoKYGBge3J9CiMgZGVtb2dyYXBoaWNzCmQyXzc5X2dlbmRlciA8LSBkZW1vX2Z1bihkMl83OSwgImdlbmRlciIsIDIpCmQyXzc5X2V0aG5pY2l0eSA8LSBkZW1vX2Z1bihkMl83OSwgImV0aG5pY2l0eSIsIDIpCmQyXzQ2X2dlbmRlciA8LSBkZW1vX2Z1bihkMl80NiwgImdlbmRlciIsIDIpCmQyXzQ2X2V0aG5pY2l0eSA8LSBkZW1vX2Z1bihkMl80NiwgImV0aG5pY2l0eSIsIDIpCmBgYAoKVHdvIGdyb3VwcyBvZiBjaGlsZHJlbiB3ZXJlIHJlY3J1aXRlZCBmb3IgdGhpcyBzdHVkeTogIm9sZGVyIiBjaGlsZHJlbiAoNy05eSkgYW5kICJ5b3VuZ2VyIiBjaGlsZHJlbiAoNC02eSkuIFRoZSBwbGFubmVkIHNhbXBsZSBzaXplIHdhcyAxMjAgcGVyIGFnZSBncm91cCwgYnV0IHRoZSByZXNlYXJjaCB0ZWFtIGFsc28gcmV0YWluZWQgYSBoYW5kZnVsIG9mIGV4dHJhIHBhcnRpY2lwYW50cyB3aG8gY29tcGxldGVkIHRoZSBzdHVkeSBvbiB0aGUgZmluYWwgZGF5IG9mIGRhdGEgY29sbGVjdGlvbiBmb3IgZWFjaCBncm91cC4KClRoZSBncm91cCB0aGF0IEkgcmVmZXIgdG8gYXMgIm9sZGVyIGNoaWxkcmVuIiAoX25fPWByIG5yb3coZDJfNzlfd2lkZSlgKSByYW5nZWQgaW4gYWdlIGZyb20gYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgLWByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYHkpLCBhbmQgcGFydGljaXBhdGVkIGF0IG9uZSBvZiBzZXZlcmFsIFNhbiBGcmFuY2lzY28gQmF5IEFyZWEgbXVzZXVtcyBvciBhdCB0aGVpciB5b3VuZ2VyIHNpYmxpbmcncyBwcmVzY2hvb2wgYmV0d2VlbiBKdWx5LURlY2VtYmVyIDIwMTYuIFRoZSBzdHVkeSB0b29rIG1vc3Qgb2xkZXIgY2hpbGRyZW4gdW5kZXIgYHIgcXVhbnRpbGUoZDJfNzkkZHVyYXRpb24sIC43NSwgbmEucm0gPSBUKSAlPiUgYXMubnVtZXJpYygpICU+JSBjZWlsaW5nKClgIG1pbnV0ZXMgdG8gY29tcGxldGUgKG1lZGlhbiBkdXJhdGlvbjogYHIgc3VtbWFyeShkMl83OSRkdXJhdGlvbilbIk1lZGlhbiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCBtaW4pLiBBY2NvcmRpbmcgdG8gcGFyZW50YWwgcmVwb3J0LCB0aGUgc2FtcGxlIG9mIG9sZGVyIGNoaWxkcmVuIGluY2x1ZGVkIHNsaWdodGx5IG1vcmUgYm95cyAoYHIgZDJfNzlfZ2VuZGVyJHByb3BbZDJfNzlfZ2VuZGVyJGdlbmRlcj09Im0iXSAqIDEwMGAlKSB0aGFuIGdpcmxzIChgciBkMl83OV9nZW5kZXIkcHJvcFtkMl83OV9nZW5kZXIkZ2VuZGVyPT0iZiJdICogMTAwYCUpOyBgciBkMl83OV9nZW5kZXIkcHJvcFtkMl83OV9nZW5kZXIkZ2VuZGVyPT0iTUlTU0lORyJdICogMTAwYCUgb2YgY2hpbGRyZW4ncyBnZW5kZXIgd2FzIG5vbi1iaW5hcnkgb3IgdW5rbm93bikuIFBhcmVudHMgcHJlZG9taW5hbnRseSBpZGVudGlmaWVkIHRoZWlyIGNoaWxkcmVuIGFzIFdoaXRlIChgciBkMl83OV9ldGhuaWNpdHkkcHJvcFtkMl83OV9ldGhuaWNpdHkkZXRobmljaXR5PT0id2hpdGUiXSAqIDEwMGAlKSwgU291dGggQXNpYW4gKGByIGQyXzc5X2V0aG5pY2l0eSRwcm9wW2QyXzc5X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJzb3V0aCBvciBzb3V0aGVhc3QgYXNpYW4iXSAqIDEwMGAlKSwgbXVsdGlyYWNpYWwgKGByIGQyXzc5X2V0aG5pY2l0eSRwcm9wW2QyXzc5X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJtdWx0aSJdICogMTAwYCUpLCBvciBFYXN0IEFzaWFuIChgciBkMl83OV9ldGhuaWNpdHkkcHJvcFtkMl83OV9ldGhuaWNpdHkkZXRobmljaXR5PT0iZWFzdCBhc2lhbiJdICogMTAwYCUpOyAkXGxlcSQgYHIgZGF0YS5mcmFtZShkMl83OV9ldGhuaWNpdHkgJT4lIGZpbHRlcighZXRobmljaXR5ICVpbiUgYygid2hpdGUiLCAibXVsdGkiLCAiZWFzdCBhc2lhbiIsICJzb3V0aCBvciBzb3V0aGVhc3QgYXNpYW4iLCAiTUlTU0lORyIpKSkkcHJvcCAlPiUgbWF4KCkgKiAxMDBgJSBvZiBjaGlsZHJlbiB3ZXJlIGlkZW50aWZpZWQgYXMgYW55IG90aGVyIHJhY2UvZXRobmljaXR5LCBhbmQgYHIgZDJfNzlfZXRobmljaXR5JHByb3BbZDJfNzlfZXRobmljaXR5JGV0aG5pY2l0eT09Ik1JU1NJTkciXSAqIDEwMGAlIG9mIGNoaWxkcmVuJ3MgcGFyZW50cyBkZWNsaW5lZCB0byBwcm92aWRlIGluZm9ybWF0aW9uIG9uIHRoZWlyIHJhY2UvZXRobmljaXR5KS4gCgoiWW91bmdlciBjaGlsZHJlbiIgKF9uXz1gciBucm93KGQyXzQ2X3dpZGUpYCkgcmFuZ2VkIGluIGFnZSBmcm9tIGByIHN1bW1hcnkoZDJfNDYkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYC1gciBzdW1tYXJ5KGQyXzQ2JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAgeWVhcnMgKG1lZGlhbjogYHIgc3VtbWFyeShkMl80NiRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWB5KSwgYW5kIHBhcnRpY2lwYXRlZCBlaXRoZXIgYXQgYSB1bml2ZXJzaXR5LWFmZmlsaWF0ZWQgcHJlc2Nob29sIG9yIGF0IGEgQmF5IEFyZWEgbXVzZXVtIGJldHdlZW4gSmFudWFyeS1KdW5lIDIwMTcuIFRoZSBzdHVkeSB0b29rIG1vc3QgeW91bmdlciBjaGlsZHJlbiB1bmRlciBgciBxdWFudGlsZShkMl80NiRkdXJhdGlvbiwgLjc1LCBuYS5ybSA9IFQpICU+JSBhcy5udW1lcmljKCkgJT4lIGNlaWxpbmcoKWAgbWludXRlcyB0byBjb21wbGV0ZSAobWVkaWFuIGR1cmF0aW9uOiBgciBzdW1tYXJ5KGQyXzQ2JGR1cmF0aW9uKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIG1pbikuIEFjY29yZGluZyB0byBwYXJlbnRhbCByZXBvcnQgYW5kIHNjaG9vbCByZWNvcmRzLCB0aGUgc2FtcGxlIG9mIHlvdW5nZXIgY2hpbGRyZW4gaW5jbHVkZWQgcm91Z2hseSB0aGUgc2FtZSBudW1iZXIgb2YgZ2lybHMgKGByIGQyXzQ2X2dlbmRlciRwcm9wW2QyXzQ2X2dlbmRlciRnZW5kZXI9PSJtIl0gKiAxMDBgJSkgYW5kIGJveXMgKGByIGQyXzQ2X2dlbmRlciRwcm9wW2QyXzQ2X2dlbmRlciRnZW5kZXI9PSJmIl0gKiAxMDBgJSkuIENoaWxkcmVuIHdlcmUgcHJlZG9taW5hbnRseSBpZGVudGlmaWVkIGFzIG11bHRpcmFjaWFsIChgciBkMl80Nl9ldGhuaWNpdHkkcHJvcFtkMl80Nl9ldGhuaWNpdHkkZXRobmljaXR5PT0ibXVsdGkiXSAqIDEwMGAlKSBvciBXaGl0ZSAoYHIgZDJfNDZfZXRobmljaXR5JHByb3BbZDJfNDZfZXRobmljaXR5JGV0aG5pY2l0eT09IndoaXRlIl0gKiAxMDBgJTsgJFxsZXEkIGByIGRhdGEuZnJhbWUoZDJfNDZfZXRobmljaXR5ICU+JSBmaWx0ZXIoIWV0aG5pY2l0eSAlaW4lIGMoIndoaXRlIiwgIm11bHRpIiwgIk1JU1NJTkciKSkpJHByb3AgJT4lIG1heCgpICogMTAwYCUgb2YgY2hpbGRyZW4gd2VyZSBpZGVudGlmaWVkIGFzIGFueSBvdGhlciByYWNlL2V0aG5pY2l0eSwgYW5kIGByIGQyXzQ2X2V0aG5pY2l0eSRwcm9wW2QyXzQ2X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJNSVNTSU5HIl0gKiAxMDBgJSBvZiBjaGlsZHJlbidzIHBhcmVudHMgZGVjbGluZWQgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0aGVpciByYWNlL2V0aG5pY2l0eSkuCgpBbiBhZGRpdGlvbmFsIDcgY2hpbGRyZW4gcGFydGljaXBhdGVkIGJ1dCB3ZXJlIGV4Y2x1ZGVkIGZvciBiZWluZyBvdXRzaWRlIHRoZSB0YXJnZXQgYWdlIHJhbmdlcy4gQXQgbXVzZXVtcyAoYnV0IG5vdCBhdCB0aGUgcHJlc2Nob29sKSwgY2hpbGRyZW4gcmVjZWl2ZWQgYSBzbWFsbCB0aGFuay15b3UgZ2lmdCAoZS5nLiwgYSBzdGlja2VyKSBmb3IgdGhlaXIgcGFydGljaXBhdGlvbi4gCgojIyMgTWF0ZXJpYWxzIGFuZCBwcm9jZWR1cmUKClBpbG90IHRlc3Rpbmcgc3VnZ2VzdGVkIHRoYXQgd29ya2luZyB3aXRoIHlvdW5nZXIgY2hpbGRyZW4gd291bGQgcmVxdWlyZSBtYWtpbmcgYSBicmllZmVyIGV4cGVyaW1lbnRhbCBwYXJhZGlnbSB3aXRoIGZld2VyIHRoYW4gdGhlIDQwIHF1ZXN0aW9ucyBpbmNsdWRlZCBpbiBTdHVkeSAyOyBsaW1pdGluZyB0aGUgbGlzdCB0byAyMCBxdWVzdGlvbnMgc2VlbWVkIHRvIGFsbG93IGNoaWxkcmVuIGFzIHlvdW5nIGFzIDQgeWVhcnMgb2YgYWdlIHRvIGNvbXBsZXRlIHRoZSBzdHVkeSBlYXNpbHkgYW5kIHdpdGhvdXQgZ2V0dGluZyBib3JlZCBvciBmcnVzdHJhdGVkLCB3aGlsZSBzdGlsbCBpbmNsdWRpbmcgZW5vdWdoIGl0ZW1zIHRvIGZhY2lsaXRhdGUgdGhlIGV4cGxvcmF0b3J5ICJkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24iIGFwcHJvYWNoIHRvIHVuY292ZXJpbmcgY29uY2VwdHVhbCBzdHJ1Y3R1cmUuCgpgYGB7cn0KZDJfYWRfY2hhciA8LSBkZW1vX2Z1bihkMl9hZCwgImNoYXJhY3RlciIpCmQyXzc5X2NoYXIgPC0gZGVtb19mdW4oZDJfNzksICJjaGFyYWN0ZXIiKQpkMl80Nl9jaGFyIDwtIGRlbW9fZnVuKGQyXzQ2LCAiY2hhcmFjdGVyIikKZDJfYWxsX2NoYXIgPC0gZDJfYWRfY2hhciAlPiUgbXV0YXRlKGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUKICBmdWxsX2pvaW4oZDJfNzlfY2hhciAlPiUgbXV0YXRlKGFnZV9ncm91cCA9ICJjaGlsZHJlbjc5IikpICU+JQogIGZ1bGxfam9pbihkMl80Nl9jaGFyICU+JSBtdXRhdGUoYWdlX2dyb3VwID0gImNoaWxkcmVuNDYiKSkKYGBgCgpTdHVkeSAzIGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLiBQYXJ0aWNpcGFudHMgd2VyZSBhc3NpZ25lZCB0byBldmFsdWF0ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0YXJnZXQgY2hhcmFjdGVyczogYW4gZWxlcGhhbnQsIGEgZ29hdCwgYSBtb3VzZSwgYSBiaXJkLCBhIGJlZXRsZSwgYSB0ZWRkeSBiZWFyLCBhIGRvbGwsIGEgcm9ib3QsIG9yIGEgY29tcHV0ZXIgKF9uXyBwZXIgY2hhcmFjYXRlcjogYHIgbWluKGQyX2FkX2NoYXIkbilgLWByIG1heChkMl9hZF9jaGFyJG4pYCBhZHVsdHMsIGByIG1pbihkMl83OV9jaGFyJG4pYC1gciBtYXgoZDJfNzlfY2hhciRuKWAgb2xkZXIgY2hpbGRyZW4sIGFuZCBgciBtaW4oZDJfNDZfY2hhciRuKWAtYHIgbWF4KGQyXzQ2X2NoYXIkbilgIHlvdW5nZXIgY2hpbGRyZW47IHNlZSBUYWJsZSAyLjIgZm9yIGV4YWN0IGNvdW50cykuIFRoZSBpbWFnZXMgdXNlZCB0byBkZXBpY3QgdGhlc2UgdGFyZ2V0IGNoYXJhY3RlcnMgYXJlIHByZXNlbnRlZCBpbiBGaWd1cmUgMi4yLgoKYGBge3J9CnRhYmxlMi4yIDwtIGQyX2FsbF9jaGFyICU+JQogIHNlbGVjdCgtcHJvcCkgJT4lCiAgZnVsbF9qb2luKGQyX2FsbF9jaGFyICU+JSAKICAgICAgICAgICAgICBncm91cF9ieShhZ2VfZ3JvdXApICU+JSAKICAgICAgICAgICAgICBzdW1tYXJpc2UobiA9IHN1bShuKSkgJT4lIAogICAgICAgICAgICAgIG11dGF0ZShjaGFyYWN0ZXIgPSAiVE9UQUwgTiIpKSAlPiUKICBzcHJlYWQoYWdlX2dyb3VwLCBuKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGdzdWIoIl8iLCAiICIsIGNoYXJhY3RlciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJlbGVwaGFudCIsICJnb2F0IiwgIm1vdXNlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaXJkIiwgImJlZXRsZSIsICJyb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcHV0ZXIiLCAidGVkZHkgYmVhciIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9sbCIsICJUT1RBTCBOIikpKSAlPiUKICBhcnJhbmdlKGNoYXJhY3RlcikgJT4lCiAgc2VsZWN0KGNoYXJhY3RlciwgYWR1bHRzLCBjaGlsZHJlbjc5LCBjaGlsZHJlbjQ2KSAlPiUKICByZW5hbWUoYG9sZGVyIGNoaWxkcmVuICg3LTl5KWAgPSBjaGlsZHJlbjc5LAogICAgICAgICBgeW91bmdlciBjaGlsZHJlbiAoNC02eSlgID0gY2hpbGRyZW40NikgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLCAKICAgICAgICBjYXB0aW9uID0gIlRhYmxlIDIuMjogU2FtcGxlIHNpemVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIgYW5kIGFnZSBncm91cCBmb3IgU3R1ZHkgMi4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMTAsIGJvbGQgPSBUKQpgYGAKCmBgYHtyIHRhYmxlMi4yLCBpbmNsdWRlID0gVH0KdGFibGUyLjIKYGBgCgpQYXJ0aWNpcGFudHMgd2VyZSBhc3NpZ25lZCB0byB0YXJnZXQgY2hhcmFjdGVycyByYW5kb21seSwgd2l0aCB0d28gZXhjZXB0aW9uczogKDEpIFRoZSBkb2xsIGFuZCB0ZWRkeSBiZWFyIGNvbmRpdGlvbnMgd2VyZSBydW4gbGFzdCBmb3Igb2xkZXIgY2hpbGRyZW4gKGJ1dCBpbmNsdWRlZCBpbiB0aGUgaW5pdGlhbCByYW5kb21pemF0aW9uIHNjaGVtZSBmb3IgYWR1bHRzIGFuZCB5b3VuZ2VyIGNoaWxkcmVuKTsgYW5kICgyKSBUb3dhcmQgdGhlIGVuZCBvZiBkYXRhIGNvbGxlY3Rpb24gd2l0aCBjaGlsZHJlbiwgY2hpbGRyZW4gd2VyZSBhc3NpZ25lZCB0byBjb25kaXRpb25zIHRoYXQgaGFkIHRoZSBmZXdlc3QgcGFydGljaXBhbnRzLiAoVGhpcyB3YXMgbm90IHBvc3NpYmxlIHdpdGggYWR1bHRzLCB3aGljaCBpcyB3aHkgdGhlIG51bWJlciBvZiBhZHVsdHMgcGVyIGNvbmRpdGlvbiB3YXMgbW9yZSB2YXJpYWJsZSB0aGFuIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gcGVyIGNvbmRpdGlvbi4pIEFzIGluIFN0dWR5IDEsIGEgdml2aWQsIGhpZ2gtcmVzb2x1dGlvbiBwaG90byBvZiB0aGUgdGFyZ2V0IGNoYXJhY3RlciBpbiBhIG5hdHVyYWxpc3RpYyBjb250ZXh0IHdhcyB2aXNpYmxlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHN0dWR5LiAKCkluc3RydWN0aW9ucyBhbmQgcHJvY2VkdXJlIHdlcmUgaWRlbnRpY2FsIHRvIFN0dWR5IDIsIHdpdGggdHdvIGV4Y2VwdGlvbnM6ICgxKSBQYXJ0aWNpcGFudHMgcmF0ZWQgdGhlIHRhcmdldCBjaGFyYWN0ZXIgb24gMjAgKHJhdGhlciB0aGFuIDQwKSBtZW50YWwgY2FwYWNpdGllczsgYW5kICgyKSBGb3IgeW91bmdlciBjaGlsZHJlbiwgdGhlIGV4cGVyaW1lbnRlciByZWFkIGFsbCBxdWVzdGlvbnMgb3V0IGxvdWQgYW5kIGNoaWxkcmVuIHJlc3BvbmRlZCB2ZXJiYWxseS4gCgpUaGUgMjAgbWVudGFsIGNhcGFjaXRpZXMgd2VyZSBhIHN1YnNldCBvZiB0aGUgNDAgaXRlbXMgdXNlZCBpbiBTdHVkeSAyLCBjaG9zZW4gdG8gY292ZXIgYSBzaW1pbGFyIHJhbmdlIG9mIGNhcGFjaXRpZXMgYXMgaW5jbHVkZWQgaW4gU3R1ZGllcyAxLTIgKHNlZSBUYWJsZSAyLjEpLiBUaGVzZSBpdGVtcyB3ZXJlIGFsc28gc2VsZWN0ZWQgdG8gaW5jbHVkZSBzb21lIG9mIHRoZSBzdHJvbmdlc3QtbG9hZGluZyBpdGVtcyBmb3IgZWFjaCBvZiB0aGUgZmFjdG9ycyB1bmNvdmVyZWQgYW1vbmcgYWR1bHRzIGluIFN0dWR5IDIgKHNlZSBDaGFwdGVyIElJSSBmb3IgZnVydGhlciBkaXNjdXNzaW9uKS4gQXMgaW4gU3R1ZHkgMiwgZWFjaCBtZW50YWwgY2FwYWNpdHkgd2FzIGFzc29jaWF0ZWQgd2l0aCBhIHNob3J0LCBwcmVzZXQgZGVmaW5pdGlvbi4gV2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBpdGVtIF9mZWVsIHNpY2tfLCB3aGljaCB3YXMgYWx3YXlzIHByZXNlbnRlZCBhbG9uZyB3aXRoIGl0cyBkZWZpbml0aW9uIChfbGlrZSB3aGVuIHlvdSBmZWVsIGxpa2UgeW91IG1pZ2h0IHRocm93IHVwXykgZm9yIGJvdGggYWR1bHRzIGFuZCBjaGlsZHJlbiwgdGhlc2UgZGVmaW5pdGlvbnMgd2VyZSBvbmx5IGdpdmVuIHRvIGNoaWxkcmVuIGlmIHRoZXkgaW5kaWNhdGVkIHRoYXQgdGhleSBkaWQgbm90IGtub3cgd2hhdCBhIHdvcmQgbWVhbnQ7IGJvdGggb2xkZXIgYW5kIHlvdW5nZXIgY2hpbGRyZW4gd2VyZSBlbmNvdXJhZ2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0dWR5IHRvIGFzayBxdWVzdGlvbnMgaWYgdGhleSBkaWQgbm90IGtub3cgd2hhdCBhIHdvcmQgbWVhbnQuIEluIFN0dWR5IDMgYWR1bHQgcGFydGljcGlhbnRzIGRpZCBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlc2UgZGVmaW5pdGlvbnMuCgpBZnRlciBjb21wbGV0aW5nIHRoZSAyMCBxdWVzdGlvbnMgYWJvdXQgbWVudGFsIGNhcGFjaXRpZXMsIGEgc3Vic2V0IG9mIHBhcnRpY2lwYW50cyBhbHNvIGFuc3dlcmVkIHR3byBhZGRpdGlvbmFsIHF1ZXN0aW9uczogIklzIGEgW3RhcmdldF0gbWFkZSBvdXQgb2YgbWV0YWw/IiBhbmQgIkNhbiBhIFt0YXJnZXRdIGJlIHR1cm5lZCBvbiBhbmQgb2ZmPyIgVGhlc2UgcXVlc3Rpb25zIHdlcmUgYWx3YXlzIGFza2VkIGxhc3QsIHdlcmUgbm90IGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGluIGFueSBvZiB0aGUgcHJpbWFyeSBhbmFseXNlcywgYW5kIHdpbGwgbm90IGJlIGFuYWx5emVkIGhlcmUuIFtYWCBDT1VMRCBJTkNMVURFIElOIFNPTUUgQVBQRU5ESVg/XQoKIyMjIERhdGEgcHJvY2Vzc2luZwoKQXMgaW4gU3R1ZHkgMiwgSSBwbGFubmVkIHRvIGRyb3AgdHJpYWxzIHdpdGggcmVzcG9uc2UgdGltZXMgdGhhdCB3ZXJlIGZhc3RlciB0aGFuIGEgcHJlc2V0IGNyaXRlcmlvbiBvZiAyNTBtcywgYnV0IHRoZXJlIHdlcmUgbm9uZSBhbW9uZyBjaGlsZHJlbiwgYW5kIEkgZmFpbGVkIHRvIHJlY29yZCByZXNwb25zZSB0aW1lcyBhbW9uZyBhZHVsdHMuIEFzIGluIFN0dWR5IDIsIHBhcnRpY2lwYW50cyB3ZXJlIHJldGFpbmVkIHJlZ2FyZGxlc3Mgb2Ygc2tpcHBlZCB0cmlhbHMuIE92ZXJhbGwsIG5vbmUgb2YgYWR1bHRzIG9yIG9sZGVyIGNoaWxkcmVuJ3MgdHJpYWxzLCBhbmQgb25seSBgciByb3VuZChzdW0oaXMubmEoZDJfNDZfd2lkZSkpL3N1bSghaXMubmEoZDJfNDZfd2lkZSkpKjEwMCwgMilgJSBvZiB5b3VuZ2VyIGNoaWxkcmVuJ3MgdHJpYWxzIChfbl89YHIgc3VtKGlzLm5hKGQyXzQ2X3dpZGUpKWApIHdlcmUgbWlzc2luZyBkYXRhLgoKCiMjIFN0dWR5IDQ6IEEgZm9jdXMgb24gZWFybHkgY2hpbGRob29kICg0LTV5KQoKVGhlIHByaW1hcnkgZ29hbCBvZiBTdHVkeSA0IHdhcyB0byBwcm92aWRlIGEgY29uY2VwdHVhbCByZXBsaWNhdGlvbiBhbmQgZXh0ZW5zaW9uIG9mIFN0dWR5IDMsIHdpdGggYSBzcGVjaWFsIGZvY3VzIG9uIHRoZSB5b3VuZ2VzdCBjaGlsZHJlbiBpbmNsdWRlZCBpbiB0aGUgcHJldmlvdXMgc3R1ZGllcyAoNC15ZWFyLW9sZCBjaGlsZHJlbikuIEluIGxpZ2h0IG9mIGNvbmNlcm5zIGFib3V0IHZvY2FidWxhcnksIGF0dGVudGlvbiwgYW5kIHVzZSBvZiB0aGUgcmVzcG9uc2Ugc2NhbGUgYW1vbmcgcHJlc2Nob29sLWFnZSBjaGlsZHJlbiBpbiBTdHVkeSAzLCBJIGRlc2lnbmVkIGFuIGV2ZW4gbW9yZSBjaGlsZC1mcmllbmRseSB2ZXJzaW9uIHNwZWNpZmljYWxseSB0YWlsb3JlZCB0byBhcHByb3ByaWF0ZSBmb3IgeW91bmcgcHJlc2Nob29sZXJzLCBieSBzdHJlYW1saW5pbmcgdGhlIGV4cGVyaW1lbnRhbCBwcm90b2NvbCwgcHJvdmlkaW5nIG1vcmUgc2NhZmZvbGRpbmcgZm9yIHRoZSByZXNwb25zZSBzY2FsZSwgYW5kIGluY2x1ZGluZyBvbmx5IHZvY2FidWxhcnkgaXRlbXMgdGhhdCB3ZXJlIHByZS10ZXN0ZWQgdG8gYmUgZmFtaWxpYXIgdG8geW91bmcgcHJlc2Nob29sIGNoaWxkcmVuLiAKClRvIGV4dGVuZCB0aGUgcmVzdWx0cyBvZiBTdHVkeSAzLCBhbmQgZm9yIHRoZSBzYWtlIG9mIGNvbXBsZXRlbmVzcyBvZiB0aGUgY29tcGFyaXNvbiBiZXR3ZWVuIGNoaWxkcmVuIGluIGVhcmx5IGNoaWRsaG9vZCwgbWlkZGxlIGNoaWxkaG9vZCwgYW5kIGFkdWx0aG9vZCwgaW4gU3R1ZHkgNCBJIHJldHVybmVkIHRvIHRoZSAiZWRnZSBjYXNlIiBzdHJhdGVneSBmb3IgZWxpY2l0aW5nIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMsIGxpbWl0aW5nIHRoZSB0YXJnZXQgY2hhcmFjdGVycyB0byBhIGJlZXRsZSBhbmQgYSByb2JvdCAoYXMgaW4gU3R1ZGllcyAxYS0xYyBhbmQgU3R1ZHkgMikuCgojIyMgUGFydGljaXBhbnRzCgpgciBkM19hZCAlPiUgZGlzdGluY3Qoc3ViaWQpICU+JSBjb3VudCgpICU+JSBhcy5udW1lcmljKCkgKyBkM180NiAlPiUgZGlzdGluY3Qoc3ViaWQpICU+JSBjb3VudCgpICU+JSBhcy5udW1lcmljKClgIHBlb3BsZSBwYXJ0aWNpcGF0ZWQgaW4gdGhpcyBzdHVkeSwgaW5jbHVkaW5nIGEgZ3JvdXAgb2YgYWR1bHRzIGFuZCBhIGdyb3VwIG9mIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4uCgpgYGB7cn0KIyBkZW1vZ3JhcGhpY3MKZDNfYWRfZ2VuZGVyIDwtIGRlbW9fZnVuKGQzX2FkLCAiZ2VuZGVyIiwgMikKZDNfYWRfZXRobmljaXR5IDwtIGRlbW9fZnVuKGQzX2FkLCAiZXRobmljaXR5X2NhdCIsIDIpCmBgYAoKQWR1bHRzIChfbl89YHIgZDNfYWQgJT4lIGRpc3RpbmN0KHN1YmlkKSAlPiUgY291bnQoKSAlPiUgYXMubnVtZXJpYygpYCkgcGFydGljaXBhdGVkIHZpYSBNVHVyayBpbiBTZXB0ZW1iZXIgMjAxOC4gQWR1bHQgcGFydGljaXBhbnRzIGhhZCBnYWluZWQgYXBwcm92YWwgZm9yIGF0IGxlYXN0IDk1JSBvZiB0aGVpciBwcmV2aW91cyB3b3JrIG9uIE1UdXJrOyBoYWQgTVR1cmsgYWNjb3VudHMgYmFzZWQgaW4gdGhlIFVTOyBhbmQgaW5kaWNhdGVkIHRoYXQgdGhleSB3ZXJlIGF0IGxlYXN0IDE4IHllYXJzIG9sZC4gQWR1bHRzIHdlcmUgcGFpZCBcJDAuNDUgZm9yIGFwcHJveGltYXRlbHkgMi00IG1pbnV0ZXMgb2YgdGhlaXIgdGltZSAobWVkaWFuIGR1cmF0aW9uOiBgciBzdW1tYXJ5KGQzX2FkJGR1cmF0aW9uKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYCBtaW4pLiBBbiBhZGRpdGlvbmFsIDIxIGFkdWx0cyBwYXJ0aWNpcGF0ZWQgYnV0IHdlcmUgZXhjbHVkZWQgZm9yIGZhaWxpbmcgdG8gcmVzcG9uZCBzZW5zaWJseSB0byBhbiBvcGVuLWVuZGVkIHF1ZXN0aW9uIGFib3V0IHdoYXQgdGhleSBoYWQgYmVlbiBhc2tlZCB0byBkbyBpbiB0aGUgc3R1ZHkgKHNlZSBTdHVkeSAzIGZvciBleGFtcGxlczsgX25fPTE2KSBvciBmb3IgZmFpbGluZyB0byBwYXNzIG9uZSBvciBtb3JlIGF0dGVudGlvbiBjaGVja3MgKGUuZy4sICJQbGVhc2Ugc2VsZWN0IG5vIjsgX25fPTUpLiBBY2NvcmRpbmcgdG8gc2VsZiByZXBvcnQsIHRoZSBmaW5hbCBhZHVsdCBzYW1wbGUgcmFuZ2VkIGluIGFnZSBmcm9tIGByIHN1bW1hcnkoZDNfYWQkYWdlKVsiTWluLiJdYC1gciBzdW1tYXJ5KGQzX2FkJGFnZSlbIk1heC4iXWAgeWVhcnMgKG1lZGlhbjogYHIgc3VtbWFyeShkM19hZCRhZ2UpWyJNZWRpYW4iXWB5KSBhbmQgaW5jbHVkZWQgc2xpZ2h0bHkgbW9yZSBtZW4gKGByIHJvdW5kKGQzX2FkX2dlbmRlciRwcm9wW2QzX2FkX2dlbmRlciRnZW5kZXI9PSJtIl0sIDIpICogMTAwYCUpIHRoYW4gd29tZW4gKGByIHJvdW5kKGQzX2FkX2dlbmRlciRwcm9wW2QzX2FkX2dlbmRlciRnZW5kZXI9PSJmIl0sIDIpICogMTAwYCUpLiBBZHVsdHMgcHJlZG9taW5hbnRseSBpZGVudGlmaWVkIGFzIFdoaXRlIChgciBkM19hZF9ldGhuaWNpdHkkcHJvcFtkM19hZF9ldGhuaWNpdHkkZXRobmljaXR5X2NhdD09IndoaXRlIl0gKiAxMDBgJTsgYHIgZDNfYWRfZXRobmljaXR5JHByb3BbZDNfYWRfZXRobmljaXR5JGV0aG5pY2l0eV9jYXQ9PSJibGFjayJdICogMTAwYCUgaWRlbnRpZmllZCBhcyBCbGFjazsgYHIgZDNfYWRfZXRobmljaXR5JHByb3BbZDNfYWRfZXRobmljaXR5JGV0aG5pY2l0eV9jYXQ9PSJtdWx0aSJdICogMTAwYCUgaWRlbnRpZmllZCBhcyBtb3JlIHRoYW4gb25lIHJhY2UvZXRobmljaXR5LCBhbmQgJFxsZXEkIGByIGRhdGEuZnJhbWUoZDNfYWRfZXRobmljaXR5ICU+JSBmaWx0ZXIoIWV0aG5pY2l0eV9jYXQgJWluJSBjKCJ3aGl0ZSIsICJtdWx0aSIpKSkkcHJvcCAlPiUgbWF4KCkgKiAxMDBgJSBhcyBhbnkgb3RoZXIgcmFjZS9ldGhuaWNpdHkpLgoKYGBge3J9CiMgZGVtb2dyYXBoaWNzCmQzXzQ2X2dlbmRlciA8LSBkZW1vX2Z1bihkM180NiwgImdlbmRlciIsIDIpCmQzXzQ2X2V0aG5pY2l0eSA8LSBkZW1vX2Z1bihkM180NiwgImV0aG5pY2l0eSIsIDIpCmBgYAoKKipYWCBDSEVDSyBXSEVOIFNBTVBMRSBJUyBDT01QTEVURSoqOiBUaGUgcGxhbm5lZCBzYW1wbGUgc2l6ZSB3YXMgMTAwIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4uIE91ciBmaW5hbCBzYW1wbGUgb2YgY2hpbGRyZW4gKF9uXz1gciBkM180NiAlPiUgZGlzdGluY3Qoc3ViaWQpICU+JSBjb3VudCgpICU+JSBhcy5udW1lcmljKClgKSByYW5nZWQgaW4gYWdlIGZyb20gYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgLWByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCB5ZWFycyAobWVkaWFuOiBgciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYHkpLCBhbmQgcGFydGljaXBhdGVkIGF0IGEgdW5pdmVyc2l0eS1hZmZpbGlhdGVkIHByZXNjaG9vbCBpbiB0aGUgQmF5IEFyZWEgYmV0d2VlbiBKYW51YXJ5LVhYIDIwMTguIFRoZSByZXNlYXJjaCB0ZWFtIGRpZCBub3QgcmVjb3JkIHN0dWR5IGR1cmF0aW9uLiBBY2NvcmRpbmcgdG8gc2Nob29sIHJlY29yZHMsIHRoZSBzYW1wbGUgb2YgeW91bmdlciBjaGlsZHJlbiBpbmNsdWRlZCBzbGlnaHRseSBtb3JlIGdpcmxzIChgciBkM180Nl9nZW5kZXIkcHJvcFtkM180Nl9nZW5kZXIkZ2VuZGVyPT0iZiJdICogMTAwYCUpIHRoYW4gYm95cyAoYHIgZDNfNDZfZ2VuZGVyJHByb3BbZDNfNDZfZ2VuZGVyJGdlbmRlcj09Im0iXSAqIDEwMGAlKS4gQ2hpbGRyZW4gd2VyZSBwcmVkb21pbmFudGx5IGlkZW50aWZpZWQgYXMgV2hpdGUgKGByIGQzXzQ2X2V0aG5pY2l0eSRwcm9wW2QzXzQ2X2V0aG5pY2l0eSRldGhuaWNpdHk9PSJ3aGl0ZSJdICogMTAwYCUpIG9yIG11bHRpcmFjaWFsIChgciBkM180Nl9ldGhuaWNpdHkkcHJvcFtkM180Nl9ldGhuaWNpdHkkZXRobmljaXR5PT0ibXVsdGkiXSAqIDEwMGAlOyAkXGxlcSQgYHIgZGF0YS5mcmFtZShkM180Nl9ldGhuaWNpdHkgJT4lIGZpbHRlcighZXRobmljaXR5ICVpbiUgYygid2hpdGUiLCAibXVsdGkiLCAiTUlTU0lORyIpKSkkcHJvcCAlPiUgbWF4KCkgKiAxMDBgJSBvZiBjaGlsZHJlbiB3ZXJlIGlkZW50aWZpZWQgYXMgYW55IG90aGVyIHJhY2UvZXRobmljaXR5LCBhbmQgYHIgZDNfNDZfZXRobmljaXR5JHByb3BbZDNfNDZfZXRobmljaXR5JGV0aG5pY2l0eT09Ik1JU1NJTkciXSAqIDEwMGAlIG9mIGNoaWxkcmVuJ3MgcGFyZW50cyBkZWNsaW5lZCB0byBwcm92aWRlIGluZm9ybWF0aW9uIG9uIHRoZWlyIHJhY2UvZXRobmljaXR5KS4KCkFuIGFkZGl0aW9uYWwgWFggY2hpbGRyZW4gcGFydGljaXBhdGVkIGJ1dCB3ZXJlIGV4Y2x1ZGVkIGZvciBiZWluZyBvdXRzaWRlIHRoZSB0YXJnZXQgYWdlIHJhbmdlcy4KCiMjIyBNYXRlcmlhbHMgYW5kIHByb2NlZHVyZSAKCk1hdGVyaWFscyBhbmQgcHJvY2VkdXJlIHdlcmUgYWRhcHRlZCB0byBiZSBtb3JlIGFwcHJvcHJpYXRlIGZvciB5b3VuZyBwcmVzY2hvb2xlcnMsIHdpdGggdHdvIHByaW1hcnkgZ29hbHMgaW4gbWluZDogU3RyZWFtbGluaW5nIHRoZSBleHBlcmltZW50YWwgcHJvdG9jb2wgdG8gaW1wcm92ZSBjaGlsZHJlbidzIGNvbXByZWhlbnNpb24gYW5kIGF0dGVudGlvbiB0byB0aGUgdGFzaywgYW5kIGxpbWl0aW5nIG1lbnRhbCBjYXBhY2l0aWVzIHRvIHdvcmRzIHRoYXQgYXJlIGhpZ2hseSBmYW1pbGlhciB0byB5b3VuZyBwcmVzY2hvb2wgY2hpbGRyZW4uCgpJbiBvcmRlciB0byBzdHJlYW1saW5lIHRoZSBleHBlcmltZW50YWwgcHJvdG9jb2wsIHRoZSB0YXNrIHdhcyBtb3ZlZCBvZmYgb2YgdGhlIGNvbXB1dGVyIChmb3IgY2hpbGRyZW4gYnV0IG5vdCBhZHVsdHMpOyB0aGUgZXhwZXJpbWVudGVyIGluc3RlYWQgdXNlZCBwcmludGVkIHBob3RvZ3JhcGhzIHRvIGlsbHVzdHJhdGUgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIChtZWFzdXJpbmcgYXBwcm94aW1hdGVseSA1IHggOCBpbmNoZXMsIHByaW50ZWQgaW4gY29sb3IgYW5kIGxhbWluYXRlZCkgYW5kIHJlY29yZGVkIGNoaWxkcmVuJ3MgcmVzcG9uc2VzIGJ5IGhhbmQuIEF0IHRoZSB0aW1lIG9mIHRlc3RpbmcsIHRoZSBleHBlcmltZW50ZXIgYW5kIGNoaWxkIHNhdCBzaWRlIGJ5IHNpZGUgYXQgYSB0YWJsZSwgd2l0aCB0aGUgcGhvdG9ncmFwaCBwbGFjZWQgb24gdGhlIHRhYmxlIGRpcmVjdGx5IGluIGZyb250IG9mIHRoZSBjaGlsZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0YXNrLiAKClRoZSBpbnRyb2R1Y3Rpb24gdG8gdGhlIHRhc2sgd2FzIGFsc28gc3RyZWFtbGluZWQuIFRoZSBleHBlcmltZW50ZXIgYmVnYW4gYnkgcGxhY2luZyB0aGUgcGhvdG9ncmFwaCBvZiB0aGUgZmlyc3QgdGFyZ2V0IGNoYXJhY3RlciBpbiBmcm9udCBvZiB0aGUgY2hpbGQgYW5kIGFza2luZywgIkNhbiB5b3UgdGVsbCBtZSB3aGF0IHRoaXMgaXM/IiBJZiBhIGNoaWxkIHByb3ZpZGVkIGFuIGFuc3dlciBvdGhlciB0aGFuICJiZWV0bGUiIG9yICJyb2JvdCwiIHRoZSBleHBlcmltZW50ZXIgc2FpZCBzb21ldGhpbmcgdG8gdGhlIGVmZmVjdCBvZiwgIkknbSBnb2luZyB0byBjYWxsIGl0IGEgW2JlZXRsZS9yb2JvdF0iOyBvdGhlcndpc2UsIHRoZSBleHBlcmltZW50ZXIgYWZmaXJtZWQgdGhlIGNoaWxkJ3MgY29ycmVjdCByZXNwb25zZS4gVGhlIGV4cGVyaW1lbnRlciB0aGVuIHNhaWQsICJXZSdyZSBnb2luZyB0byBwbGF5IGEgZ2FtZSBhYm91dCBbYmVldGxlcy9yb2JvdHNdIjsgcmVtaW5kZWQgY2hpbGRyZW4sICJJZiB5b3UgZXZlciB3YW50IHRvIHN0b3AgcGxheWluZywgeW91IGNhbiBqdXN0IGxldCBtZSBrbm93IGFuZCB3ZSdsbCBnbyBiYWNrIHRvIHRoZSBjbGFzc3Jvb20iIChwZXIgdGhpcyB1bml2ZXJzaXR5IHByZXNjaG9vbCdzIHByb3RvY29sKTsgYW5kIHRoZW4gbGF1bmNoZWQgZGlyZWN0bHkgaW50byB0aGUgZmlyc3QgcXVlc3Rpb24gKGUuZy4sICJDYW4gYmVldGxlcyBnZXQgc2FkPyIpLgoKVG8gc2NhZmZvbGQgY2hpbGRyZW4ncyB1c2Ugb2YgdGhlIHRocmVlLXBvaW50IHJlc3BvbnNlIHNjYWxlLCB0aGUgZXhwZXJpbWVudGVyIHByb3ZpZGVkIHRoZSBjaGlsZCB3aXRoIGEgcGh5c2ljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNjYWxlIGNvbnNpc3Rpbmcgb2YgdGhyZWUgbGFyZ2UgYm94ZXMsIHNlcGFyYXRlZCBieSBibGFuayBzcGFjZSwgY29udGFpbmluZyB0aGUgd29yZHMgIk5PLCIgIktJTkRBLCIgYW5kICJZRVMiIHdyaXR0ZW4gaW4gbGFyZ2UgZm9udCB3aXRoIGFsbCBjYXBpdGFsIGxldHRlcnMgKHRvIGFpZCBjaGlsZHJlbiB3aXRoIGF0IGxlYXN0IHNvbWUgcmVhZGluZyBza2lsbHMgaW4gcmVjb2duaXppbmcgdGhlc2Ugd29yZHMpOyBjb2xvci1jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGludGVuc2l0eSBvZiByZXNwb25zZSAoTk8gPSB2ZXJ5IGxpZ2h0IGJsdWUsIEtJTkRBID0gbWVkaXVtIGJsdWUsIFlFUyA9IGRhcmsgYmx1ZSk7IGFuZCBvcmRlcmVkIGZyb20gbGVmdCAoTk8pIHRvIHJpZ2h0IChZRVMpLiBFYWNoIGJveCBtZWFzdXJlZCBhcHByb3hpbWF0ZWx5IDIgeCA0IGluY2hlczsgdGhlIGJveGVzIHdlcmUgbGFtaW5hdGVkIHdpdGggc2xpZ2h0bHkgbGVzcyB0aGFuIDEgaW5jaCBvZiBlbXB0eSBzcGFjZSBiZXR3ZWVuIHRoZW0gKHRocm91Z2ggd2hpY2ggdGhlIHRhYmxlIHdhcyB2aXNpYmxlKS4gSW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIHRoZXNlIHZpc3VhbCBhbmQgc3BhdGlhbCBjdWVzIHRvIHRoZSBmYWN0IHRoYXQgdGhlcmUgd2VyZSB0aHJlZSByZXNwb25zZSBvcHRpb25z4oCUbm8sIHllcywgYW5kIHNvbWV0aGluZyBjb25jZXB0dWFsbHkgYW5kIGxpdGVyYWxseSAiaW4gYmV0d2VlbiIgdGhlc2UgZXh0cmVtZXPigJR0aGUgZXhwZXJpbWVudGVyIGRlc2NyaWJlZCAoYW5kIHRoZW4gcmVpdGVyYXRlZCkgdGhlc2UgcmVzcG9uc2Ugb3B0aW9ucyBvbiB0aGUgZmlyc3QgdGhyZWUgdHJpYWxzICgiWW91IGNhbiBzYXkgbm8gW3BvaW50aW5nIHRvIE5PXSwga2luZGEgW3BvaW50aW5nIHRvIEtJTkRBXSwgb3IgeWVzIFtwb2ludGluZyB0byBZRVNdIikuIFRoZSBleHBlcmltZW50ZXIgcmVwZWF0ZWQgdGhlc2Ugb3B0aW9ucyBvbiB0aGUgZmlyc3QgdGhyZWUgdHJpYWxzIGZvciBhbGwgY2hpbGRyZW4sIGFuZCBvbiBhbnkgb3RoZXIgdHJpYWxzIHdoZXJlIGEgY2hpbGQgdG9vayBtb3JlIHRoYW4gYSBmZXcgc2Vjb25kcyB0byBhbnN3ZXIgb3IgcHJvdmlkZWQgYSByZXNwb25zZSBvdGhlciB0aGFuIHNheWluZyAieWVzLCIgImtpbmRhIiBvciAic29ydGEsIiAibm8sIiBvciBjbGVhcmx5IHBvaW50aW5nIHRvIG9uZSBvZiB0aGUgdGhyZWUgb3B0aW9ucyBvbiB0aGUgcmVzcG9uc2Ugc2NhbGUuCgpGb3IgZWFjaCBvZiB0aGUgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIChiZWV0bGUsIHJvYm90OyBzZWUgRmlndXJlIDIuMiksIGNoaWxkcmVuIGFuc3dlcmVkIDE4IHF1ZXN0aW9ucyBhYm91dCBpdHMgbWVudGFsIGNhcGFjaXRpZXM7IHNlZSBUYWJsZSAyLjEuIFRoZXNlIGl0ZW1zIHdlcmUgY2hvc2VuIHRvIGJlIGFzIHNob3J0IGFzIHBvc3NpYmxlIGFuZCB0byBiZSBoaWdobHkgZmFtaWxpYXIgdG8geW91bmcgcHJlc2Nob29sIGNoaWxkcmVuLiBUaGV5IHdlcmUgc2VsZWN0ZWQgZnJvbSBhIGxhcmdlciBwaWxvdCBzdHVkeSBpbiB3aGljaCAzLSB0byA1LXllYXItb2xkIGNoaWxkcmVuIHdlcmUgYXNrZWQgdG8gY29tcGxldGUgc3RvcmllcyB0aGF0IGJlZ2FuIHdpdGggZWFjaCBvZiB0aGVzZSBtZW50YWwgY2FwYWNpdGllcyBhcyBhIHByZW1pc2UgKGUuZy4sICJMZXQncyBpbWFnaW5lIGEgcGVyc29uIHdobyBfbG92ZXMgc29tZW9uZV8uIFdoYXQgaGFwcGVucyBuZXh0PyI7ICJOb3cgbGV0J3MgcHJldGVuZCB0aGF0IHNvbWVvbmUgX3JlbWVtYmVycyBzb21ldGhpbmdfLiBXaGF0IGhhcHBlbnMgbmV4dD8iKSBhbmQgd2VyZSBqdWRnZWQgb24gdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB0aGVpciBzdG9yeSBjb21wbGV0aW9uLiBJdGVtcyB3ZXJlIGFsc28gc2VsZWN0ZWQgdG8gcHJvdmlkZSBhIGNvbnNlcnZhdGl2ZSB0ZXN0IG9mIGRldmVsb3BtZW50YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB5b3VuZ2VyIGFuZCBvbGRlciBjaGlsZHJlbiBpbiB0aGUgImNvbmNlcHR1YWwgdW5pdHMiIG9ic2VydmVkIGluIFN0dWR5IDI7IHNlZSBDaGFwdGVyIElJSSBmb3IgZGlzY3Vzc2lvbi4gQXMgaW4gU3R1ZGllcyAyLTMsIGVhY2ggbWVudGFsIGNhcGFjaXR5IHdhcyBhc3NvY2lhdGVkIHdpdGggYSBzaG9ydCwgcHJlc2V0IGRlZmluaXRpb24gKHNlZSBUYWJsZSAyLjEpLiBVbmxpa2UgU3R1ZGllcyAyLTMsIG5vbmUgb2YgdGhlc2UgZGVmaW5pdGlvbnMgd2VyZSBjb25zaWRlcmVkIG1hbmRhdG9yeTsgaW5zdGVhZCwgZm9yIGFsbCAxOCBpdGVtcywgZGVmaW5pdGlvbnMgd2VyZSBwcm92aWRlZCB0byBjaGlsZHJlbiBvbmx5IGlmIHRoZXkgZXhwcmVzc2VkIHVuY2VydGFpbnR5IGFib3V0IHdoYXQgYSB3b3JkIG1lYW50IG9yIGRpZCBub3QgcmVzcG9uZCBhZnRlciBwcm9tcHRpbmcgdXNlIG9mIHRoZSByZXNwb25zZSBzY2FsZS4gQXMgaW4gU3R1ZHkgMywgaW4gU3R1ZHkgNCBhZHVsdCBwYXJ0aWNwaWFudHMgZGlkIG5vdCBoYXZlIGFjY2VzcyB0byB0aGVzZSBkZWZpbml0aW9ucy4KCkNoaWxkcmVuIGZpcnN0IGFzc2Vzc2VkIGFsbCAxOCBtZW50YWwgY2FwYWNpdGllcyBmb3Igb25lIG9mIHRoZSB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgKGUuZy4sIHRoZSBiZWV0bGUpLCB0aGVuIGNvbXBsZXRlZCBhbiBlYXN5IGppZ3NhdyBwdXp6bGUgZmVhdHVyaW5nIGNsb3RoaW5nIGFuZCBhY2Nlc3NvcmllcyBhcHByb3ByaWF0ZSBmb3IgYSByYWlueSBkYXkgKHdoaWNoIHRvb2sgYWJvdXQgMzAtNjAgcyB0byBjb21wbGV0ZSksIGFuZCBmaW5hbGx5IGFzc2Vzc2VkIGFsbCAxOCBtZW50YWwgY2FwYWNpdGllcyBmb3IgdGhlIG90aGVyIHRhcmdldCBjaGFyYWN0ZXIgKGUuZy4sIHRoZSByb2JvdCkuCgpUaGlzIG1vZGlmaWVkIHByb2NlZHVyZeKAlHBhcnRpY3VsYXJseSBtb3ZpbmcgdGhlIGV4cGVyaW1lbnQgb2ZmIG9mIHRoZSBjb21wdXRlciBmb3IgY2hpbGRyZW7igJRyZXF1aXJlZCBzZXZlcmFsIGNoYW5nZXMgdG8gdGhlIGV4cGVyaW1lbnRhbCBkZXNpZ24uIFJhdGhlciB0aGFuIHJhbmRvbWx5IGFzc2lnbmluZyBjaGlsZHJlbiB0byBhc3Nlc3MgdGhlIGJlZXRsZSBmaXJzdCBvciB0aGUgcm9ib3QgZmlyc3QsIHRoZSBvcmRlciBvZiB0YXJnZXQgY2hhcmFjdGVycyB3YXMgY291bnRlcmJhbGFuY2VkIGluIGFkdmFuY2UuIExpa2V3aXNlLCByYXRoZXIgdGhhbiBhc2tpbmcgYWJvdXQgdGhlIDE4IG1lbnRhbCBjYXBhY2l0aWVzIGluIGEgcmFuZG9tIG9yZGVyLCBxdWVzdGlvbnMgYWJvdXQgdGhlIGZpcnN0IHRhcmdldCBjaGFyYWN0ZXIgd2VyZSBhc2tlZCBpbiBvbmUgb2YgOCBwcmUtbWFkZSByYW5kb20gb3JkZXJzLCBhbmQgcXVlc3Rpb25zIGFib3V0IHRoZSBzZWNvbmQgdGFyZ2V0IGNoYXJhY3RlciB3ZXJlIGFza2VkIGluIHRoZSByZXZlcnNlIG9yZGVyLiBUaGUgb3JkZXIgb2YgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIChiZWV0bGUtcm9ib3Qgb3Igcm9ib3QtYmVldGxlKSBhbmQgdGhlIG9yZGVyIG9mIHRoZSBtZW50YWwgY2FwYWNpdHkgcXVlc3Rpb25zIChzZXF1ZW5jZXMgMS04KSB3ZXJlIGZ1bGx5IGNyb3NzZWQgYWNyb3NzIHBhcnRpY2lwYW50cy4gCgpBZHVsdHMgcGFydGljaXBhdGVkIGluIGFuIG9ubGluZSB2ZXJzaW9uIG9mIHRoaXMgc2FtZSB0YXNrLCB3aXRob3V0IGEgYnJlYWsgYmV0d2VlbiB0YXJnZXQgY2hhcmFjdGVycy4gQXMgaW4gU3R1ZGllcyAxLTIsIGFkdWx0cyBjbGlja2VkIHRocm91Z2ggYSB3ZWJzaXRlIGF0IHRoZWlyIG93biBwYWNlLCB3aXRoIG9uZSB0cmlhbCBwcmVzZW50ZWQgb24gZWFjaCBwYWdlIGFuZCBubyBhYmlsaXR5IHRvIGdvIGJhY2t3YXJkcy4gCgojIyMgRGF0YSBwcm9jZXNzaW5nCgpUaGUgcmVzZWFyY2ggdGVhbSBkaWQgbm90IHJlY29yZCByZXNwb25zZSB0aW1lcyBvciB1c2UgdGhpcyBhcyBhIGNyaXRlcmlvbiBmb3IgaW5jbHVzaW9uLiBBcyBpbiBTdHVkaWVzIDEtMywgcGFydGljaXBhbnRzIHdlcmUgcmV0YWluZWQgcmVnYXJkbGVzcyBvZiBza2lwcGVkIHRyaWFscyAoX25fPVhYIHRyaWFscyBhbW9uZyBjaGlsZHJlbjsgWFglIG9mIGFsbCB0cmlhbHMpLgoKIyMgRXhhbXBsZSBkYXRhCgpYWFhYWFhYCgpgYGB7cn0KdGFibGUyLjMgPC0gcmVhZF9jc3YoIi4vZGVzaWduL2V4YW1wbGVfZGF0YS5jc3YiKSAlPiUKICBhcnJhbmdlKGNhcGFjaXR5KSAlPiUKICBncm91cF9ieShzdWJpZCkgJT4lCiAgdG9wX24oNiwgY2FwYWNpdHkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZV9ncm91cCwgYWdlLCBjaGFyYWN0ZXIsIGNhcGFjaXR5LCByZXNwb25zZSkgJT4lCiAgc3ByZWFkKGNhcGFjaXR5LCByZXNwb25zZSkgJT4lCiAgZnVsbF9qb2luKGRhdGEuZnJhbWUoc3ViaWQgPSAiW290aGVyIHBhcnRpY2lwYW50cy4uLl0iKSkgJT4lCiAgcmVuYW1lKCMgU3R1ZHkgPSBzdHVkeSwKICAgICAgICAgYFBhcnRpY2lwYW50IElEYCA9IHN1YmlkLAogICAgICAgICBgVGFyZ2V0IGNoYXJhY3RlcmAgPSBjaGFyYWN0ZXIsCiAgICAgICAgIGBBZ2UgZ3JvdXBgID0gYWdlX2dyb3VwLAogICAgICAgICBgQWdlICh5KWAgPSBhZ2UpICU+JQogIG11dGF0ZShgW290aGVyIG1lbnRhbCBjYXBhY2l0aWVzLi4uXWAgPSAiLi4uIikgJT4lCiAgbXV0YXRlX2FsbChmdW5zKHJlcGxhY2VfbmEoLiwgIi4uLiIpKSkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLCAjYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgMykpLAogICAgICAgIGNhcHRpb24gPSAiVGFibGUgMi4zOiBFeGFtcGxlIGRhdGEgZnJvbSB0aHJlZSAoaHlwb3RoZXRpY2FsKSBwYXJ0aWNpcGFudHMuIFRBUkdFVCBDSEFSQUNURVJTOiBJbiBTdHVkaWVzIDFhLCAxYiwgMWQsIDIsIGFuZCAzLCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIsIHlpZWxkaW5nIG9uZSByb3cgb2YgZGF0YSBwZXIgcGFydGljaXBhbnQgKGFzIHNob3duIGhlcmUpLiBJbiBTdHVkaWVzIDFjIGFuZCA0LCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIHR3byB0YXJnZXQgY2hhcmFjdGVycywgd2hpY2ggd291bGQgbWFuaWZlc3QgYXMgb25lIGFkZGl0aW9uYWwgcm93IG9mIGRhdGEgcGVyIHBhcnRpY2lwYW50LiBNRU5UQUwgQ0FQQUNJVElFUzogSW4gU3R1ZGllcyAxYS0xZCBhbmQgMiwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCA0MCBtZW50YWwgY2FwYWNpdGllcyBwZXIgdGFyZ2V0IGNoYXJhY3RlcjsgdGhpcyB3b3VsZCBtYW5pZmVzdCBhcyA0MCBjb2x1bW5zIG9mIHJlc3BvbnNlcyB0byB0aGUgcmlnaHQgb2YgdGhlICdUYXJnZXQgY2hhcmFjdGVyJyBjb2x1bW4uIEluIFN0dWR5IDMsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgMjAgbWVudGFsIGNhcGFjaXRpZXMgcGVyIHRhcmdldCBjaGFyYWN0ZXIgKDIwIGNvbHVtbnMgb2YgcmVzcG9uc2VzKTsgYW5kIGluIFN0dWR5IDQsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgMTggbWVudGFsIGNhcGFjaXRpZXMgcGVyIHRhcmdldCBjaGFyYWN0ZXIgKDE4IGNvbHVtbnMgb2YgcmVzcG9uc2VzKS4gIEFERElUSU9OQUwgVkFSSUFCTEVTOiBBIHZhcmlldHkgb2YgYWRkaXRpb25hbCB2YXJpYWJsZXMgd2VyZSByZWNvcmRlZCwgaW5jbHVkaW5nIHRoZSBpZGVudGl0eSBvZiB0aGUgZXhwZXJpbWVudGVyOyB0aGUgZGF0ZSwgdGltZSwgdG90YWwgZHVyYXRpb24sIGFuZCBsb2NhdGlvbiBvZiB0aGUgdGVzdGluZyBzZXNzaW9uOyB0aGUgZ2VuZGVyIGFuZCByYWNlL2V0aG5pY2l0eSBvZiB0aGUgcGFydGljaXBhbnQgKGFzIHdlbGwgYXMgYW5kIG90aGVyIGRlbW9ncmFwaGljIHZhcmlhYmxlcywgd2hpY2ggdmFyaWVkIGFjcm9zcyBzdHVkaWVzIGFuZCBhZ2UgZ3JvdXBzKTsgYW5kLCBmb3IgZWFjaCB0cmlhbCwgcmVzcG9uc2UgdGltZSwgd2hldGhlciBvciBub3QgdGhlIHBhcnRpY2lwYW50IHdhcyBwcm92aWRlZCB3aXRoIGFkZGl0aW9uYWwgY2xhcmlmaWNhdGlvbiBhYm91dCB0aGUgbWVudGFsIGNhcGFjaXR5IHVuZGVyIGRpc2N1c3Npb24sIGFuZCBvdGhlciBhc3BlY3RzIG9mIHRoZSBleHBlcmltZW50YWwgZGlzcGxheSAoc2VlICdNZXRob2RzJykuIE9ubHkgYWdlIGdyb3VwIGFuZCBleGFjdCBhZ2UgKGluIHllYXJzKSBhcmUgc2hvd24gaGVyZSwgc2luY2UgdGhlc2UgdmFyaWFibGVzIHdlcmUgY29uc2lkZXJlZCBwcmltYXJ5IHZhcmlhYmxlcyBvZiBpbnRlcmVzdC4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sdW1uX3NwZWMoNCwgYm9yZGVyX3JpZ2h0ID0gVCkKYGBgCgpgYGB7ciB0YWJsZTIuMywgaW5jbHVkZSA9IFR9CnRhYmxlMi4zCmBgYAo=